此问题与Laravel (5.3) Eloquent - Relationship issue有关,请访问此网址以获取更多信息。
我最终得到了以下脚本:
$genres = ['action', 'drama', 'romance'];
$similiarSeries = TheSeries::whereHas('TheGenres', function($q) use($genres) {
$q->whereIn('genre', $genres);
}, '>=', 1);
return $similiarSeries->take(10);
它的作用是:它检查上面变量至少有一个类型的电影,并返回10部电影(如果存在)。
问题在于他们的电影是以混乱的顺序返回的,相反,如果他们会优先播放动作,戏剧,浪漫,然后只返回2种类型的电影(如:戏剧,浪漫或浪漫,动作)。然后只有1种类型。
这是否可以在laravel?
这是电影及其类型的示例列表:
Zootopia: Action, Animation, Drama
Toy Story: Action, Drama, Romance
Kung Fu Panda: Action, Animation, Fantasy
Avatar: Action, Drama, Romance
Titanic: Action, Drama, Romance
Avengers: Fantasy, Drama, Fiction
Batman: Adventure
因此,如果我们搜索的电影中至少有一个['动作','戏剧','浪漫'],
我希望能够返回以下内容:
Toy Story (Action, Drama, Romance) (3)
Avatar (Action, Drama, Romance) (3)
Titanic (Action, Drama, Romance) (3)
Zootopia (Action, Drama) (2)
Kung Fu Panda (Action) (1)
Avengers (Drama) (1)
Batman (0)
答案 0 :(得分:2)
好的,来找你。
从Laravel 5.2.41开始,您可以使用withCount()
这样的方法:
$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);
这将按匹配的流派计数(desc)排序。