#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);