gpt4 book ai didi

php - Laravel 获取带有多个标签的帖子

转载 作者:行者123 更新时间:2023-12-04 00:30:49 25 4
gpt4 key购买 nike

我正在处理 PostTag 之间的 laravel belongsToMany 关系。

我要做的是获取所有 Post 具有多个标签的位置。

我尝试了各种 Eloquent 查询,但我根本无法得到它。

目前我可以获得一组 post_idtag_id 的数组,如下所示,但必须有更简单的方法来做到这一点。

if (Request::has('tags')) {
$tags = Tag::find(explode(',', Request::get('tags')));
}else{
$tags = null;
}
// Get all posts tagged with the tags
$jobs = \DB::table('post_tag');
foreach ($tags as $tag) {
$posts = $posts->orwhere('tag_id', $tag->id);
}
dd($posts->get());

这会转储具有任何 ID 的所有帖子的数组,但我需要获取一个 post_id 数组,其中包含所有 tag_id

提前致谢!

最佳答案

最好在 Post 模型上使用 whereHas() 来预先加载标签并仅获取 Post至少具有这些标签之一。

$posts = Post::whereHas('tags', function($q) use ($tags)
{
$q->whereIn('id', $tags);
})->get();

这里,$tags 只是一个标签 id 的数组。 $posts 将是 PostCollection。要从中获取 id 数组,您可以简单地这样做...

$ids = $posts->lists('id'); 

或者不是原来调用get(),而是使用...->lists('id')

编辑

如果您只查找那些包含所有标签的 Post,则需要将一些附加参数传递给 whereHas 函数。

$posts = Post::whereHas('tags', function($q) use ($tags)
{
$q->whereIn('id', $tags);
}, '=', count($tags))->get();

将会发生的情况是它只会抓取附加的标签数量等于标签数组中标签数量的帖子。

如果您使用这种方法,请确保您的数据透视表得到正确管理,因为不能多次将某个标签附加到某个模型。

关于php - Laravel 获取带有多个标签的帖子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30872905/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com