Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment obtenir l'enregistrement si Count est égal à zéro dans Laravel

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 !