MySQL vil ikke udfylde de måneder, der ikke er tilgængelige, det vil blot gruppere efter, hvad du har til rådighed og derefter give dig disse resultater.
Hvad du kan gøre er at bruge DatePeriod
og Laravels Collection
klasse:
$results = DB::table('bookings')
->selectRaw("DATE_FORMAT(created_At,'%Y-%m-01') as monthNum, count(*) as totalbook")
->orderBy('monthNum')
->groupBy('monthNum')
->get();
$results = collect($results)->keyBy('monthNum')->map(function ($item) {
$item->monthNum = \Carbon\Carbon::parse($item->monthNum);
return $item;
});
$periods = new DatePeriod($results->min('monthNum'), \Carbon\CarbonInterval::month(), $results->max('monthNum')->addMonth());
$graph = array_map(function ($period) use ($results) {
$month = $period->format('Y-m-d');
return (object)[
'monthNum' => $period->format('M Y'),
'totalbook' => $results->has($month) ? $results->get($month)->totalbook : 0,
];
}, iterator_to_array($periods));
Bemærk venligst, at jeg har opdateret monthNum
i forespørgslen, da den vil blive omformateret senere.
Du skal også bruge blade raw tags ({!! !!}
) for dette som {{ $dat->totalbook }}
burde fungere helt fint.
Håber dette hjælper!