Solusi ini berhasil untuk saya, saya pertama kali membuat array dengan semua tanggal dalam rentang waktu, dengan tanggal ditetapkan sebagai kunci dan menghitung nilai ditetapkan sebagai 0, dan kemudian mengganti nilai setelah kueri di DB, dalam array yang sama dengan count nilai dari kueri:
$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);