sql >> Database teknologi >  >> RDS >> Mysql

Sådan får du posten, hvis Count er nul i Laravel

MySQL vil ikke udfylde de måneder, der ikke er tilgængelige, det vil blot gruppere efter, hvad du har til rådighed og derefter give dig disse resultater.

Hvad du kan gøre er at bruge DatePeriod og 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));

Bemærk venligst, at jeg har opdateret monthNum i forespørgslen, da den vil blive omformateret senere.

Du skal også bruge blade raw tags ({!! !!} ) for dette som {{ $dat->totalbook }} burde fungere helt fint.

Håber dette hjælper!



  1. Dårlige vaner:Undgå NULL i SQL Server

  2. Find den nærmeste placering ved hjælp af postnummer?

  3. pdo udarbejdede udsagn med jokertegn

  4. Få advarsel:Nulværdi elimineres af en samlet eller anden SET-operation