Я успешно группирую по дате и времени (каждый час) следующим образом:
$adminActivities = Activity::whereBetween('created_at', [$data->from_date, $data->to_date])->where('user_id', $data->admin_id)->get()
->groupBy(function($date) {
return Carbon::parse($date->created_at)->format('Y-m-d H');
});
Пример результатов, которые я получаю в атм. за 1 день:
2019-10-18 10: [{…}]
2019-10-18 15: (15) [{…}, ...]
В примере мы видим, что он нашел 1 результат за 10 часов и 15 результатов за 15 часов.
Я использую результаты для созданияграфик с графиком js.
Мне нужны все часы дня, вот что я хочу:
2019-10-18 00: []
2019-10-18 01: []
2019-10-18 02: []
2019-10-18 03: []
...
2019-10-18 10: [{…}]
2019-10-18 15: (15) [{…}, ...]
...
2019-10-18 23: []
Что мне делать, чтобызаставить возвращать также нулевые результаты для каждого часа?
Я пробовал другой синтаксис, но результаты те же:
$adminActivities = Activity::whereBetween('created_at', [$data->from_date, $data->to_date])->where('user_id', $data->admin_id)
->selectRaw("COUNT(*) views, DATE_FORMAT(created_at, '%Y-%m-%d %H') date")->groupBy('date')->get();