2013-09-10 129 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