MySQL sẽ không điền vào những tháng không có sẵn, nó sẽ chỉ nhóm theo những gì bạn có sẵn và sau đó cung cấp cho bạn những kết quả đó.
Những gì bạn có thể làm là sử dụng DatePeriod
và Collection
của Laravel lớp:
$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));
Xin lưu ý rằng tôi đã cập nhật monthNum
trong truy vấn vì nó sẽ được định dạng lại sau này.
Ngoài ra, bạn nên sử dụng các thẻ thô của phiến ({!! !!}
) cho cái này là {{ $dat->totalbook }}
sẽ hoạt động hoàn toàn tốt.
Hy vọng điều này sẽ hữu ích!