Laravel Query Builder - группировка по сумме - PullRequest
0 голосов
/ 23 апреля 2019

Я хочу получить список действий пользователя. Но он должен вернуть мне только 5 пользователей, у которых больше всего действий, и столбец с суммой действий, упорядоченной по сумме действий DESC.

$now = Carbon::now();
$lastWeekMonday = Carbon::now()->subWeek(1)->startOfWeek()->toDateString();
$mondayThisWeek = Carbon::now()->startOfWeek()->toDateString();

$userActivitiesLastWeek = DB::table('useractions')
    ->select('id', 'comment', 'created_user', 'created_at')
    ->where('created_at', '>=', $lastWeekMonday )
    ->where('created_at', '<', $mondayThisWeek )
    ->get();

Спасибо за помощь!

1 Ответ

0 голосов
/ 23 апреля 2019

Вы можете использовать функцию withCount Query Builder для подсчета определенного отношения.

И затем вы можете упорядочить по этому количеству и использовать функцию take Collection, чтобы получить желаемое количество элементов изколлекция.В вашем случае 5.

$now = Carbon::now();
$lastWeekMonday = Carbon::now()->subWeek(1)->startOfWeek()->toDateString();
$mondayThisWeek = Carbon::now()->startOfWeek()->toDateString();

$uses = User::with('activities')
            ->withCount('activities')
            ->where('created_at', '>=', $lastWeekMonday )
            ->where('created_at', '<', $mondayThisWeek )
            ->get()
            ->sortByDesc('activities_count')
            ->take(5);
...