MySQL - Выборка по нескольким значениям (фильтр, все условия выборки)
подскажите куда копнуть что-бы фильтр корректно заработал.
Так вот, мне нужно что-бы при выборке выполнялись все условия т.е. выбрать только те элементы из таблицы у которых жанры fantastika и skola если у нас есть элемент с жанром fantastika но у него нет жанра skola то он в выборку не попадает.
Массив жанров (приходит из формы):
array:2 [
0 => "fantastika"
1 => "skola"
]
Мой класс ItemsFetcher.php для выборки данных
public function all(Filter $filter): LengthAwarePaginator
{
$all = CategoryItems::query();
if ($genres = $filter->genres) {
$all->whereHas('genres', function (Builder $query) use ($genres) {
$query->join('category_item_genres', 'category_item_genres.id', '=', 'category_items_item_genres.genre_id');
$query->whereIn('slug', $genres);
});
}
return $all->with(
'kind'
)->paginate(20);
}
Попытки написать sql запрос
where exists (select *
from `category_items_item_genres`
inner join `category_item_genres`
on `category_item_genres`.`id` = `category_items_item_genres`.`genre_id`
where `category_items`.`id` = `category_items_item_genres`.`item_id`
and `category_item_genres`.`slug` in ('fantastika','skola')
)
Смотрел решения в сети но так и не получилось реализовать ;(
Источник: Stack Overflow на русском