sql >> Database >  >> RDS >> Mysql

Hoe het record te krijgen als Count nul is in Laravel

MySQL vult niet de maanden in die niet beschikbaar zijn, het zal gewoon groeperen op wat je beschikbaar hebt en je die resultaten geven.

Wat je zou kunnen doen is DatePeriod . gebruiken en Laravel's Collection klas:

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

Let op:ik heb monthNum bijgewerkt in de query omdat deze later opnieuw zal worden geformatteerd.

U moet ook de onbewerkte blade-tags gebruiken ({!! !!} ) hiervoor als {{ $dat->totalbook }} zou absoluut goed moeten werken.

Ik hoop dat dit helpt!



  1. Tekstcompressie in PostgreSQL

  2. Getallen opmaken door opvulling met voorloopnullen in SQL Server

  3. Hoe mysqli uitzonderingen te laten maken met behulp van MYSQLI_REPORT_STRICT?

  4. MySQL/InnoDB en langlopende queries