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

Laravel Eloquent obtenir des résultats regroupés par jours

Je crois avoir trouvé une solution à cela, la clé est la fonction DATE() dans mysql, qui convertit un DateTime en juste Date :

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

Cependant, ce n'est pas vraiment une solution Laravel Eloquent, car il s'agit d'une requête brute. Voici ce que j'ai trouvé dans la syntaxe Eloquent-ish. La première clause where utilise des dates carbone pour comparer.

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