Maison >base de données >tutoriel mysql >Comment effectuer efficacement des agrégations de sommes avec GroupBy dans Laravel Eloquent ?

Comment effectuer efficacement des agrégations de sommes avec GroupBy dans Laravel Eloquent ?

DDD
DDDoriginal
2025-01-03 08:25:381037parcourir

How to Efficiently Perform Sum Aggregations with GroupBy in Laravel Eloquent?

Agrégation de somme avec GroupBy dans Laravel Eloquent

Introduction :
L'ORM Eloquent de Laravel fournit un moyen pratique de récupérer et de manipuler des données à partir d'un base de données. Lorsque vous travaillez avec de grands ensembles de données, il devient nécessaire de regrouper les données et d'effectuer des agrégations telles que des sommes.

Énoncé du problème :
Le code fourni tente de calculer la somme de no_of_pages regroupés par users_editor_id. en utilisant les méthodes sum() et groupBy() d'Eloquent. Cependant, cette approche échoue car sum() exécute la requête et renvoie le résultat avant que groupBy() puisse être appliqué.

Solution :

Pour résoudre Pour résoudre ce problème, nous pouvons utiliser une combinaison de méthodes groupBy() et selectRaw(). Voici une solution mise à jour :

Document::groupBy('users_editor_id')
   ->selectRaw('sum(no_of_pages) as sum, users_editor_id')
   ->pluck('sum','users_editor_id');

Explication :

  • groupBy('users_editor_id') : regroupe les lignes par la colonne users_editor_id.
  • selectRaw('sum(no_of_pages) comme somme, users_editor_id') : ajoute une nouvelle colonne nommée sum au résultat, qui contient la somme de no_of_pages pour chaque groupe.
  • pluck('sum','users_editor_id') : récupère les valeurs sum et users_editor_id et les renvoie sous forme de tableau.

Alternative Solution :

Une autre approche consiste à utiliser la méthode selectRaw() avec get() pour renvoyer une collection de modèles pseudo-ORM :

Document::groupBy('users_editor_id')
   ->selectRaw('*, sum(no_of_pages) as sum')
   ->get();

Cette méthode ajoute la somme colonne à chaque modèle résultant, vous permettant d'y accéder comme un modèle normal propriété.

Conclusion :

En utilisant les méthodes groupBy(), selectRaw() et pluck(), nous pouvons effectuer efficacement des agrégations de somme avec regroupement dans Laravel Eloquent . Ces techniques nous permettent de gérer efficacement de grands ensembles de données et d'extraire des informations précieuses à partir des données.

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!

Déclaration:
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