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

Требуется решение для составления списка пользователей на основе максимальных выигранных кредитов (столбец суммы суммы в выигрышах).
Две модели: Пользователь и Выигрыш.У пользователя много выигрышей.

 $top_scorers = User::with('winnings')->orderBy("sum of amount column in all winnings")

Ответы [ 2 ]

1 голос
/ 15 марта 2019

Вы можете использовать модифицированный withCount():

$top_scorers = User::withCount(['winnings as amount' => function ($query) {
    $query->select(DB::raw('sum(amount)'));
}])->orderByDesc('amount')->get();
1 голос
/ 15 марта 2019

Будет проще, если вы пойдете по другому пути:

 $usersByWinnings = Winning::with('user')
       ->select('user_id', \DB::raw('SUM(amount) as winnings'))
       ->groupBy('user_id')
       ->orderBy('winnings', 'DESC')
       ->get()->map(function (Winning $winning) {
             return $winning->user;
        });

В качестве альтернативы вы можете сделать постобработку sortBy

$top_scorers = User::with('winnings')->get()
                  ->sortByDesc(function (User $user) {
                       return $user->winnings->sum('amount');
                   });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...