Php 返回所有带有一组特定标记的Laravel雄辩模型

Php 返回所有带有一组特定标记的Laravel雄辩模型,php,laravel-5,eloquent,pivot-table,Php,Laravel 5,Eloquent,Pivot Table,我有一个能言善辩的模型Post,它与有一个的关系。现在,如果我想返回或获取带有给定标记集的所有帖子,那么Laravel esq执行此类查询的最有效方式是什么 比如,;获取所有带有标签bbq的帖子,或所有带有标签bbq和beef的帖子 如果可能的话,我只想传递一个标记数组,其中可以有任意数量的标记。我尝试了以下几种不同的组合,但运气不佳,就算我的SQL功夫不是最好的 $posts = Post::whereHas('tags', function ($query) { $query->

我有一个能言善辩的模型
Post
,它与
有一个
的关系。现在,如果我想返回或获取带有给定标记集的所有帖子,那么Laravel esq执行此类查询的最有效方式是什么

比如,;获取所有带有标签
bbq
的帖子,或所有带有标签
bbq
beef
的帖子

如果可能的话,我只想传递一个标记数组,其中可以有任意数量的标记。我尝试了以下几种不同的组合,但运气不佳,就算我的SQL功夫不是最好的

$posts = Post::whereHas('tags', function ($query) {
    $query->whereIn('tag_types.name', ['bbq', 'beef']);
})->get();

最终找到了解决办法。在这种情况下,需要知道相关标签的ID,这很容易查询。在这种情况下,我将标记ID存储在一个名为
$tag\u ID
的数组中,并使用以下雄辩的查询(
tag\u type
作为透视表):

$posts
现在包含包含
$tag\u ID
中列出的每个标记ID的所有帖子的ID


希望这能帮助任何面临类似困境的人

最终找到了解决办法。在这种情况下,需要知道相关标签的ID,这很容易查询。在这种情况下,我将标记ID存储在一个名为
$tag\u ID
的数组中,并使用以下雄辩的查询(
tag\u type
作为透视表):

$posts
现在包含包含
$tag\u ID
中列出的每个标记ID的所有帖子的ID

希望这能帮助任何面临类似困境的人

$posts = Post::join('tag_types', function ($join) use ($tag_ids) {
    $join
        ->on('posts.id', '=', 'tag_types.post_id')
        ->whereIn('tag_types.tag_id', $tag_ids);
})
    ->groupBy('posts.id')
    ->havingRaw('count(distinct tag_types.tag_id) = ' . count($tag_ids))
    ->lists('post_id');