MySQL ne remplira pas les mois qui ne sont pas disponibles, il regroupera simplement ce dont vous disposez et vous donnera ensuite ces résultats.
Ce que vous pourriez faire est d'utiliser DatePeriod
et la Collection
de Laravel classe :
$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));
Veuillez noter que j'ai mis à jour monthNum
dans la requête car elle sera reformatée ultérieurement.
De plus, vous devriez avoir besoin d'utiliser les balises brutes de la lame ({!! !!}
) pour cela comme {{ $dat->totalbook }}
devrait fonctionner parfaitement.
J'espère que cela vous aidera !