sql >> データベース >  >> RDS >> Mysql

Laravelでカウントがゼロの場合にレコードを取得する方法

    MySQLは、利用できない月を入力しません。利用可能な月ごとにグループ化して、それらの結果を提供します。

    できることは、DatePeriodを使用することです およびLaravelのCollection クラス:

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

    monthNumを更新したことに注意してください 後で再フォーマットされるため、クエリで。

    また、ブレードのrawタグ({!! !!})を使用する必要があります )このために{{ $dat->totalbook }} 絶対にうまくいくはずです。

    これがお役に立てば幸いです!



    1. MySQLに一度に複数の値を挿入する

    2. SQLiteException:データベースから読み取るときに認識されないトークン

    3. SelectクエリのOFFSET-FETCHオプションによるフィルタリング-SQLServer/TSQLチュートリアルパート118

    4. RedHatにsqlcmdとbcpをインストールする方法