Laravel获得包含多个标签的帖子

时间:2015-06-16 16:13:17

标签: php sql-server laravel eloquent

我正在使用belongsToManyPost之间的la {{{}}}关系。

我要做的是让所有Tag获得多个标签。

我尝试过各种有说服力的查询,但我根本无法得到它。

目前,我可以获得Postpost_id的数组,如下所示,但必须有一种更简单的方法。

tag_id

这会转储包含任何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()); 的{​​{1}}数组。

提前致谢!

1 个答案:

答案 0 :(得分:6)

最好在whereHas()模型上使用Post来急切加载标记,并仅获取至少包含其中一个标记的Post

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

此处,$tags只是一个标记ID的数组。 $postsCollection Post。要从中获取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();

将会发生的事情是,它只会抓取附加了多个标签的帖子,这些帖子等于标签数组中标签的数量。

如果您使用此方法,请确保您的数据透视表已正确管理,因为无法将某个标记多次附加到某个模型。