MySQL füllt nicht die Monate aus, die nicht verfügbar sind, es gruppiert einfach nach dem, was Sie verfügbar haben, und gibt Ihnen dann diese Ergebnisse aus.
Was Sie tun könnten, ist DatePeriod
zu verwenden und 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));
Bitte beachten Sie, dass ich monthNum
aktualisiert habe in der Abfrage, da sie später neu formatiert wird.
Außerdem sollten Sie die Blade-Raw-Tags verwenden müssen ({!! !!}
) hierfür als {{ $dat->totalbook }}
sollte absolut gut funktionieren.
Hoffe, das hilft!