2013-09-10 2 views
0

У меня есть два объекта, скажем Post и Tag с отношением «многие ко многим».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

Смежные вопросы