sql >> Databáze >  >> RDS >> Mysql

Jak získat záznam, pokud je počet v Laravelu nula

MySQL nevyplní měsíce, které nejsou k dispozici, jednoduše seskupí podle toho, co máte k dispozici, a poté vám poskytne tyto výsledky.

Co můžete udělat, je použít DatePeriod a Laravelova Collection třída:

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

Upozorňujeme, že jsem aktualizoval monthNum v dotazu, protože bude později přeformátován.

Také byste měli použít značky blade raw ({!! !!} ) pro toto jako {{ $dat->totalbook }} by mělo fungovat naprosto dobře.

Doufám, že to pomůže!



  1. Otázka MySQL – Unikátní klíč Nefunguje správně, nebo tomu nerozumím?

  2. Jak vytvořit nový databázový diagram pomocí MySQL Workbench

  3. MySQL SUM() dává nesprávný součet

  4. načítání enwiki-latest-categorylinks.sql do mysql