Maison > base de données > tutoriel mysql > le corps du texte

Comment regrouper les enregistrements de base de données par jours à l'aide de Laravel Eloquent ?

Patricia Arquette
Libérer: 2024-10-27 03:33:03
original
645 Les gens l'ont consulté

How to Group Database Records by Days Using Laravel Eloquent?

Interrogation des enregistrements de base de données regroupés par jours à l'aide de Laravel Eloquent

Lorsque vous travaillez avec des bases de données, il est souvent nécessaire d'agréger les données selon certains intervalles, tels que jours. Dans le cas de Laravel Eloquent, la méthode groupBy() nous permet d'effectuer un tel regroupement, mais les colonnes basées sur le temps comme create_at peuvent poser un défi lors de l'utilisation de cette méthode.

Problème : regroupement par jours en considérant seconds

Le problème se pose car les colonnes create_at incluent généralement des heures, des minutes et des secondes, ce qui entraîne des horodatages différents pour les événements se produisant le même jour. Par conséquent, lors du regroupement par create_at, les enregistrements du même jour peuvent être séparés en raison du décalage horaire.

Par exemple, considérons les exemples de données suivants :

created_at page_id user_id
2023-10-11 01:02:03 3 1
2023-10-12 12:34:56 5 5
2023-10-13 15:47:12 5 2
2023-10-13 18:23:09 3 4

Si nous essayons de regrouper ces données par create_at à l'aide de la commande Eloquent :

<code class="php">$visitorTraffic = PageView::groupBy('created_at')->get();</code>
Copier après la connexion

Nous nous retrouverons avec des lignes séparées pour chaque fois qu'un visiteur a accédé à une page un jour particulier, ce qui n'est pas le résultat souhaité.

Solution : Utilisation de requêtes brutes et de dates carbone

Pour surmonter ce problème, une solution consiste à utiliser des requêtes SQL brutes. Dans MySQL, la fonction DATE() peut être utilisée pour convertir un horodatage en la date correspondante, nous permettant ainsi de regrouper par jours sans tenir compte de la composante temporelle. La requête suivante peut être utilisée :

<code class="sql">DB::table('page_views')
->selectRaw('DATE(created_at) AS date, COUNT(*) AS views')
->groupBy('date')
->get();</code>
Copier après la connexion

Alternativement, une approche plus centrée sur Laravel Eloquent peut être utilisée en utilisant les dates Carbon :

<code class="php">$visitorTraffic = PageView::where('created_at', '>=', Carbon::now()->subMonth())
->groupBy(DB::raw('DATE(created_at)'))
->orderBy('date', 'DESC')
->get([
    DB::raw('DATE(created_at) AS date'),
    DB::raw('COUNT(*) AS views')
]);</code>
Copier après la connexion

En utilisant la fonction DATE() ou Carbon dates, nous pouvons regrouper les enregistrements de la base de données par jours tout en garantissant que les enregistrements représentant le même jour sont regroupés.

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!