MySQL vult niet de maanden in die niet beschikbaar zijn, het zal gewoon groeperen op wat je beschikbaar hebt en je die resultaten geven.
Wat je zou kunnen doen is DatePeriod
. gebruiken en Laravel's Collection
klas:
$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));
Let op:ik heb monthNum
bijgewerkt in de query omdat deze later opnieuw zal worden geformatteerd.
U moet ook de onbewerkte blade-tags gebruiken ({!! !!}
) hiervoor als {{ $dat->totalbook }}
zou absoluut goed moeten werken.
Ik hoop dat dit helpt!