我的网页上有一个Top Shows
的列表,这些列表是通过按show_id
对剧集进行分组并按view
排序生成的。我急切地在查询中加载Show
,如下所示:
public function getPopularShows($amount = null)
{
if (!$amount) {
return $this->episode->groupBy('show_id')->orderBy('views', 'desc')->with('show')->get();
}
return $this->episode->groupBy('show_id')->orderBy('views', 'desc')->with('show')->get()->take($amount);
}
然而,这显然返回了一个episodes
的集合,而我想要一个shows
的集合。有聪明的方法吗?
我现在唯一能想到的办法就是做一个array_map
,把这一集换成这个节目。
我不知道我是否理解你想要实现的目标,但也许你需要
public function getPopularShows($amount = null)
{
return Show::whereIn('id', function($q) use ($amount) {
$q = $q->selectRaw('show_id')->from('episodes')->orderBy('views','DESC');
if ($amount) {
$q = $q->take($amount);
}
$q->get();
})->get();
}