Mysql
 sql >> Datenbank >  >> RDS >> Mysql

So erhalten Sie den Datensatz, wenn Count in Laravel Null ist

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!