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

Laravel - remplissez les dates manquantes et les comptes de la base de données

Cette solution a fonctionné pour moi, j'ai d'abord créé un tableau avec toutes les dates dans la plage de temps, avec des dates définies comme clés et des valeurs de comptage définies sur 0, puis j'ai remplacé les valeurs après la requête dans DB, dans le même tableau avec count valeurs de la requête :

$period = new DatePeriod( new DateTime($from), new DateInterval('P1D'), new DateTime($to));
      $dbData = [];

      foreach($period as $date){
          $range[$date->format("Y-m-d")] = 0;
      }

      $data = DB::table($request['option'])
                ->select(DB::raw('DATE(created_at) as time'), DB::raw('count(*) as count'))
                ->whereDate('created_at', '>=', date($from).' 00:00:00')
                ->whereDate('created_at', '<=', date($to).' 00:00:00')
                ->groupBy('time')
                ->get();

      foreach($data as $val){
        $dbData[$val->time] = $val->count;
      }

      $data = array_replace($range, $dbData);
    }

    return json_encode($data);