2015-03-11 5 views
1

У меня есть 3 таблицы:, где и отношения

  • статьи
  • теги
  • article_tag

Они оба многие ко многим отношений с шарниром.

мне нужно запросить это, чтобы получить все статьи, которые имеют массив тегов:

Article::with('tags')->whereIn('id', $tagIdArray)->get(); 

Проблема с вышесказанным в том, что это возвращение статьи, которые имеют идентификатор $ tagIdArray. Как я могу ограничить результаты, чтобы использовать whereIn в отношении тэгов?

+0

Пробовал 'tags.id'? – rmobis

ответ

1

У вас есть правильная идея, но немного от мяча. Использование функций with('tags') просто тянет ваши статьи со связанными тегами, запросы, привязанные после функции with(), по-прежнему применяются к модели статей.

Для запроса отношения вы можете сделать следующий

$tagIdArray = [1, 3, 5, 7, 9]; 

$articles = Article::whereHas('tags', function($query) use ($tagIdArray) 
{ 
    /** 
     * Now querying the Tags relation. So anything in this closure will query the Tags 
     * relation, but outside of the closure, you're back to querying the Articles. 
     */ 
    $query->whereIn('id', $tagIdArray); 
)->get(); 

Heres Документы Laravel на запрашивая отношения http://laravel.com/docs/4.2/eloquent#querying-relations