Maison > base de données > tutoriel mysql > Comment regrouper les résultats de Laravel Eloquent par jours lorsque les horodatages varient ?

Comment regrouper les résultats de Laravel Eloquent par jours lorsque les horodatages varient ?

DDD
Libérer: 2024-10-27 07:46:02
original
514 Les gens l'ont consulté

How do I group Laravel Eloquent results by days when timestamps vary?

Regroupement des résultats éloquents de Laravel par jours

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 :

Question :

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
  ...            ...
Copier après la connexion

Quelqu'un peut-il fournir des informations ou des solutions ?

Réponse :

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();
Copier après la connexion

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"')
                            ));
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal