Laravel where 关系中的条件
Laravel where condition in relationship
我有一段时间遇到了问题.. 我有一个 anime_shows 的列表,每个都有多种类型,我想创建一个过滤器,用户可以 select 只有那些包含一些特定类型。
我有 3 个表:anime_shows、流派 和 anime_show_genres(在最后一列中,我有 2 列 anime_show_id,genre_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 等等的动漫。
我有一段时间遇到了问题.. 我有一个 anime_shows 的列表,每个都有多种类型,我想创建一个过滤器,用户可以 select 只有那些包含一些特定类型。
我有 3 个表:anime_shows、流派 和 anime_show_genres(在最后一列中,我有 2 列 anime_show_id,genre_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 等等的动漫。