2013-09-10 131 views
0

我有两个对象,如PostTag,它们具有多对多的关系。Laravel:基于多对多关系的筛选器查询

基于一组标签,我想选择与(1)任何标签或(2)集合中所有标签匹配的所有帖子。

有没有一种简单的方法在Laravel中执行这些查询(最好是使用Eloquent)?

回答

-1

你查询你想要的标签,那么你可以循环遍历每个标签的帖子与

$tags = Tag::where('name','=','Laravel 4')->get(); 
foreach($tags as $tag) 
{ 
    foreach($tag->posts as $post) 
    { 
     echo $post->name; 
    } 
} 

这是假设你有你的关系,你的数据透视表的设置适当。

您可以根据某些职位也渴望加载某些标签...

$posts = Post::where('name','=','Some post name') ->with(array('tags' => function($query) { $query = $query->where('tag_name','=','Laravel'); }))->get();

foreach($posts as $post) 
{ 
    foreach($post->tags as $tag) 
    { 
     echo $tag->tag_name; 
    } 
} 
+0

谢谢!但最终我希望收集可以排序的帖子。您的解决方案只给我一个帖子名称(或对象)列表,按标签排序。另外:我不太明白你的答案的第二部分是如何与我的问题相关的。你能否多加一点解释? – severin

+0

当使用我的第二个示例时,它会查找名称为“Some post name”的所有帖子,然后为每个帖子找到tag_name为“Laravel”的标签。这可能正是你需要的,因为你也可以用'$ query = $ query-> sortBy('name'); – user1669496