Giải pháp này phù hợp với tôi, đầu tiên tôi tạo một mảng với tất cả các ngày trong phạm vi thời gian, với ngày được đặt làm khóa và giá trị đếm được đặt là 0, sau đó thay thế các giá trị sau truy vấn trong DB, trong cùng một mảng với số giá trị từ truy vấn:
$period = new DatePeriod( new DateTime($from), new DateInterval('P1D'), new DateTime($to));
$dbData = [];
foreach($period as $date){
$range[$date->format("Y-m-d")] = 0;
}
$data = DB::table($request['option'])
->select(DB::raw('DATE(created_at) as time'), DB::raw('count(*) as count'))
->whereDate('created_at', '>=', date($from).' 00:00:00')
->whereDate('created_at', '<=', date($to).' 00:00:00')
->groupBy('time')
->get();
foreach($data as $val){
$dbData[$val->time] = $val->count;
}
$data = array_replace($range, $dbData);
}
return json_encode($data);