返回laravel中热切加载的模型集合


Return collection of eager loaded models in laravel

我的网页上有一个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();
}