Dans Laravel, lors de l'interrogation d'une base de données, vous pouvez rencontrer le besoin de regrouper les résultats par jours au lieu d'horodatages. Voici une question et une réponse détaillées pour répondre à ce scénario spécifique :
J'ai une table nommée page_views, qui stocke les enregistrements des visites de pages ainsi que les horodatages, les adresses IP des utilisateurs et les identifiants de page. . Malgré l'utilisation de la méthode groupBy, les requêtes ne regroupent pas correctement les données par jours en raison des différences en secondes dans les horodatages.
Je souhaite récupérer les résultats en fonction des vues par jour, qui devraient ressembler à :
date views ==== ===== 10-11-2013 15 10-12 2013 45 ... ...
Quelqu'un peut-il fournir des informations ou des solutions ?
Pour regrouper efficacement les résultats par jours, la réponse suggère d'utiliser la fonction DATE() de MySQL, qui extrait la partie date d'un DateTime. value :
DB::table('page_views') ->select(DB::raw('DATE(created_at) as date'), DB::raw('count(*) as views')) ->groupBy('date') ->get();
Cependant, cette approche de requête brute s'écarte de la syntaxe du générateur de requêtes d'Eloquent. Pour une solution plus éloquente, la réponse présente ce qui suit :
$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"') ));
Cette requête utilise les dates Carbon dans la clause Where initiale à des fins de comparaison et applique les expressions brutes DB appropriées dans la méthode get pour récupérer à la fois la date et nombre de vues.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!