Laravel OrderBy подсчет отношений без загрузки моделей (count) - PullRequest
0 голосов
/ 05 октября 2019

У меня есть таблица 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 секунд, потому чтоУ меня около 500 тыс. Прослушиваний записей в базе данных, и за очень короткий промежуток времени их станут миллионы.

Есть мысли?

Заранее спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...