Laravel 5.3。 - 如何在where子句和orderBy中使用关系中的sum('column')

时间:2016-12-09 13:59:02

标签: database laravel eloquent sum relation

我有两个表:users和user_actions。我需要让所有用户在哪里('可用',是真的)(......和其他一些逻辑)并通过user_actions.clicks列的总和对它们进行排序。

public function actions()
{
        return $this->hasMany(UserActions::class);
}

我需要这样的东西:

User::where('available', true)->where("something else....")->orderBy('sum(user_actions.clicks)', 'desc')->get();

结果必须是User of Class类。

2 个答案:

答案 0 :(得分:2)

您可以在User::where('available', true) ->where("something else....") ->join('user_actions', 'users.id', '=', 'user_actions.user_id') ->orderBy(DB::raw("sum('user_actions.clicks')")) ->groupBy('users.id') ->select('users.*') ->get(); 中尝试sortBy

User::where('available', true)->with('user_actions')->get()
    ->sortBy(function ($user) {
        return $user->user_actions->sum('clicks');
    });

或者您可以将集合的{{1}}方法用作:

{{1}}

通常,你可以在数据库端处理这一切,但这种方式是值得的,因为它极大地简化了过程。

答案 1 :(得分:0)

您可以执行类似

的操作
->selectRaw('user_actions.clicks, sum(user_actions.clicks) as clicks')
->where('available', true)->where("something else....")
->orderBy('clicks', 'desc');