Всем привет. Есть две модели фильмы(Movie) и жанры (Genre). Фильмы связаны с жанрами по связи belongsToMany с pivot таблицей genre_movie.
Задача: найти все фильмы, с заданными id жанров.
Делаю так:
$movies = Movie::with('genres')
->whereHas('genres', function ($query) use ($ids) {
foreach ($ids as $id) {
$query->where('genre_movie.genre_id', $id);
}
})
->get();
В таком варианте я всегда получаю пустую выборку. Если же вместо массива $ids, передать только одно значение, то получаю все фильмы по этому жанру.
$movies = Movie::with('genres')
->whereHas('genres', function ($query) use ($id) {
$query->where('genre_movie.genre_id', $id);
})
->get();
Если же вернуть перечисление всех id, то результат пустой. В этом случае запрос выглядит так:
select * from `movies` where exists (select * from `genres` inner join `genre_movie` on `genres`.`id` = `genre_movie`.`genre_id` where `movies`.`id` = `genre_movie`.`movie_id` and `genre_movie`.`genre_id` = ? and `genre_movie`.`genre_id` = ?)
Не понимаю, в чем проблема? Наверняка какую-то мелочь упускаю, подскажите, пожалуйста.