我有以下代码:
$genres = ['action', 'drama', 'romance'];
$similiarSeries = TheEpisode::with('TheSeries.TheGenres')->whereHas('TheSeries.TheGenres', function($q) use($genres) {
$q->whereIn('genre', $genres);
});
此代码将: 1.让TheGenres可见(关系) 2.将搜索有动作类型或戏剧或浪漫的电视剧。
但是现在我想根据与$genres
数组匹配的数量对它们进行排序。
假设TheEpisode
与TheSeries.TheGenres
匹配所有3种类型(动作,戏剧,浪漫),应首先排序,然后另一TheEpisode
只匹配2种类型(动作,戏剧) ,这应该作为第二... ...
此问题与Laravel orderBy whereHas非常相关。
$similiarSeries = TheSeries::whereHas('TheGenres', function($q) use($genres) {
$q->whereIn('genre', $genres);
})->withCount(['TheGenres' => function ($query) use ($genres) {
$query->whereIn('genre', $genres);
}])->orderBy('TheGenres_count', 'desc');
return $similiarSeries->take(10);
唯一的区别是,现在我们正在尝试提取与TheEpisode
相关的TheSeries
。
我已经尝试了以下代码,这应该适用于我的意见,但它表示属性“TheGenres”未定义:
$similiarSeries = TheEpisode::with('TheSeries.TheGenres')->whereHas('TheSeries.TheGenres', function($q) use($genres) {
$q->whereIn('genre', $genres);
})->withCount(['TheSeries' => function ($q) use ($genres) {
$q->TheGenres->whereIn('genre', $genres);
}])->orderBy('the_genres_count', 'desc');
在laravel中这是不可能的吗?