我有两个表: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类。
答案 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');