Laravel where 关系中的条件

Laravel where condition in relationship

我有一段时间遇到了问题.. 我有一个 anime_shows 的列表,每个都有多种类型,我想创建一个过滤器,用户可以 select 只有那些包含一些特定类型。

我有 3 个表:anime_shows流派anime_show_genres(在最后一列中,我有 2 列 anime_show_idgenre_id)。

我当前代码的问题是我得到了所有 anime_shows 我至少有一种类型,所以我使用 OR 代替 AND。我还尝试在 whereHas 中执行 forEach 但没有用。

$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));

尝试像这样循环流派:

$genres = $request->genres ?: [];

foreach ($genres as $genre) {
    $anime->whereHas('genres', function($q) use ($genre) {
        $q->where('id', $genre);
    });
}

这将是具有类型 A 和类型 B 等等的动漫。