首页 > 解决方案 > 不加载模型的 Laravel OrderBy 关系计数(计数)

问题描述

我有一张episodes桌子和一张episode_Listen桌子,这是一集到很多听
我想获得最高听的 6 集。我已经尝试了如下每一个解决方案:

$trending = Episode::where('active', true)
                            ->get()->sortBy(function($podcast) {
                                return $podcast->latestListens;
                            });

或者

$trending = Episode::where('active', true)
                    ->withCount('listens')
                    ->orderBy('listens_count', 'desc')
                    ->get();

或者

$trending = Episode::join('episode_listens', function ($join) {
    $join->on('episode_listens.episode_id', '=', 'episodes.id');
})
->groupBy('episodes.id')
->orderBy('count', 'desc')
->select((['episodes.*', DB::raw('COUNT(episode_listens.podcast_id) as count')]))->paginate(6);

但是执行时间总是超过 6 秒,因为我在数据库中有大约 500k 的监听记录,它们会在很短的时间内达到数百万。

有什么想法吗?

提前致谢

标签: phpmysqllaravel

解决方案


推荐阅读