sql >> Base de Datos >  >> RDS >> Mysql

Laravel:complete las fechas y los recuentos faltantes de la base de datos

Esta solución funcionó para mí, primero creé una matriz con todas las fechas en el rango de tiempo, con fechas establecidas como claves y valores de conteo establecidos como 0, y luego reemplacé los valores después de la consulta en DB, en la misma matriz con conteo valores de la consulta:

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