Mysql
 sql >> Database >  >> RDS >> Mysql

Laravel Eloquent ottiene risultati raggruppati per giorni

Credo di aver trovato una soluzione a questo, la chiave è la funzione DATE() in mysql, che converte un DateTime in solo Date:

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

Tuttavia, questa non è davvero una soluzione Laravel Eloquent, poiché si tratta di una query grezza. Quanto segue è ciò che mi è venuto in mente con la sintassi Eloquent-ish. La prima clausola dove utilizza le date di carbonio per il confronto.

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