【问题标题】:Laravel eloquent orderby related model's column sum (has Many Relationship)Laravel eloquent orderby 相关模型的列总和(有很多关系)
【发布时间】:2019-03-15 09:20:45
【问题描述】:

需要一种解决方案来根据赢得的最大积分(奖金中的金额列的总和)列出用户。
两个模型 User 和 Winning 。 用户有很多奖金。

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

【问题讨论】:

  • 我必须按相关模型中的列的总和而不是相关模型计数..@ApródIllés

标签: php laravel eloquent


【解决方案1】:

您可以使用修改后的withCount()

$top_scorers = User::withCount(['winnings as amount' => function ($query) {
    $query->select(DB::raw('sum(amount)'));
}])->orderByDesc('amount')->get();

【讨论】:

    【解决方案2】:

    如果你反过来做会更容易:

     $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');
                       });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-05
      • 1970-01-01
      • 2021-10-04
      • 1970-01-01
      • 2018-06-06
      • 2019-05-14
      • 1970-01-01
      • 2016-02-26
      相关资源
      最近更新 更多