Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Laravel - füllen Sie fehlende Daten und Zählungen aus der Datenbank aus

Diese Lösung hat für mich funktioniert, ich habe zuerst ein Array mit allen Daten im Zeitbereich erstellt, wobei Daten als Schlüssel und Zählwerte auf 0 gesetzt sind, und dann die Werte nach der Abfrage in DB im selben Array durch Zählung ersetzt Werte aus der Abfrage:

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