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

Laravel Eloquent obtiene resultados agrupados por días

Creo que he encontrado una solución a esto, la clave es la función DATE() en mysql, que convierte un DateTime en solo Date:

DB::table('page_views')
      ->select(DB::raw('DATE(created_at) as date'), DB::raw('count(*) as views'))
      ->groupBy('date')
      ->get();

Sin embargo, esta no es realmente una solución de Laravel Eloquent, ya que se trata de una consulta sin procesar. Lo siguiente es lo que se me ocurrió en la sintaxis de Eloquent-ish. La primera cláusula where usa fechas de carbono para comparar.

$visitorTraffic = PageView::where('created_at', '>=', \Carbon\Carbon::now->subMonth())
                            ->groupBy('date')
                            ->orderBy('date', 'DESC')
                            ->get(array(
                                DB::raw('Date(created_at) as date'),
                                DB::raw('COUNT(*) as "views"')
                            ));