How to get the record if Count is zero in Laravel

后端 未结 2 1578
走了就别回头了
走了就别回头了 2021-01-06 13:03

Im using Chart.js to show the number of bookings for each month. This is my query. It is working fine. My problem is if there is no booking in a month then it doesnt show an

相关标签:
2条回答
  • 2021-01-06 13:16

    You have to set zero when there are no records for counting.

    Change your query something like this:

    $graph = DB::table('bookings')
    ->select(DB::raw('MONTHNAME(created_at) as month'), 
             DB::raw("DATE_FORMAT(created_At,'%M') as monthNum"),    
             DB::raw('ifnull(count(*),0) as totalbook'))
    ->groupBy('monthNum')
    ->orderBy('created_at', 'asc')
    ->get();
    

    Hope you understand.

    0 讨论(0)
  • 2021-01-06 13:20

    MySQL will not fill in the months that aren't available, it will simply group by what you have available and then give you those results.

    What you could do is use DatePeriod and Laravel's Collection class:

    $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));
    

    Please note I have updated monthNum in the query as it will be reformatted later.

    Also, you should need to use the blade raw tags ({!! !!}) for this as {{ $dat->totalbook }} should work absolutely fine.

    Hope this helps!

    0 讨论(0)
提交回复
热议问题