Heim > Datenbank > MySQL-Tutorial > Wie kann man Daten in Laravel Eloquent effizient summieren und gruppieren?

Wie kann man Daten in Laravel Eloquent effizient summieren und gruppieren?

DDD
Freigeben: 2024-12-31 17:07:16
Original
808 Leute haben es durchsucht

How to Efficiently Sum and Group Data in Laravel Eloquent?

So summieren und gruppieren Sie nach in Laravel mit Eloquent

In dieser Abfrage besteht das Ziel darin, Eloquent zu verwenden, um die Summe von a zu berechnen eine bestimmte Spalte, während die Ergebnisse basierend auf einer anderen Spalte gruppiert werden. Das in der Frage angegebene Beispiel, in dem die Summe der Spalte „no_of_pages“ nach „users_editor_id“ gruppiert werden muss, dient als praktische Veranschaulichung.

Der erste Versuch, der in der Frage bereitgestellt wird, weist ein logisches Problem auf. Da sum() die Abfrage sofort ausführt und das Ergebnis zurückgibt, wird die Gruppierung versucht, nachdem die Abfrage bereits verarbeitet wurde. Laravel unterstützt die Anwendung der Gruppierung nach der Ausführung der Abfrage nicht, daher der Fehler.

Um dieses Problem zu beheben, muss die Abfragestruktur geändert werden. Anstatt groupBy() nach sum() zu verwenden, beginnen Sie mit der Gruppierung der Ergebnisse mithilfe von groupBy('users_editor_id'). Dadurch werden effektiv Unterabfragen für jeden eindeutigen Wert „users_editor_id“ erstellt.

Fügen Sie als Nächstes eine selectRaw()-Klausel hinzu, um die interessierenden Spalten aus den gruppierten Ergebnissen anzugeben. In diesem Fall handelt es sich um die aggregierte Summe: sum(no_of_pages) as sum.

Verwenden Sie schließlich pluck(), um nur die Spalten „sum“ und „users_editor_id“ aus dem Ergebnis zu extrahieren. Dadurch wird ein Array mit „users_editor_id“ als Schlüssel und der entsprechenden Summe als Wert zurückgegeben.

Hier ist die überarbeitete Abfrage:

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

Ein alternativer Ansatz besteht darin, eine selectRaw()-Klausel zu verwenden Fügen Sie sum(no_of_pages) als zusätzliche Spalte in die Unterabfrage ein. Allerdings erzeugt diese Methode eine Sammlung von Pseudomodellen, die die Originalspalten und die berechnete Summe als zusätzliches Feld enthalten.

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

Das obige ist der detaillierte Inhalt vonWie kann man Daten in Laravel Eloquent effizient summieren und gruppieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage