I have a problem for sometime.. I have a list of anime_shows and each one of them have multiple genres and I want to create a filter where a user can select only the ones that contains some specific genres.
I have 3 tables: anime_shows, genres and anime_show_genres (in the last one I have 2 columns anime_show_id, genre_id).
The problem with my current code is that I get all anime_shows where I have at least 1 genre, so I am using OR insted of AND. I also tried to do a forEach inside of whereHas but is not working.
$anime = AnimeShow::select('id', 'slug', 'status', 'title_eng', 'title_jap', 'description', 'episodes', 'premier_date', 'status')
->with('media:anime_show_id,image_path');
if($request->genres){
$genres = $request->genres ? $request->genres : [];
$anime->whereHas('genres', function($q) use($genres){
$q->whereIn('id',$genres);
});
}
if($request->airing){
$anime->whereIn('status', $request->airing);
}
$anime->search($request->search);
return response($anime->paginate($request->perPage, ['*'], 'page', $request->currentPage));