Конструктор запросов Laravel — группировать по и суммировать

#laravel #laravel-query-builder

#laravel #laravel-конструктор запросов

Вопрос:

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

 $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:

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

И затем вы можете сделать заказ по этому количеству и использовать take функцию сбора, чтобы взять желаемое количество элементов из коллекции. В вашем случае 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);