2013-08-19 5 views
6

Ich suche den Mittelwert über mehrere Spalten auf einem ähnlichen Modell, um so etwas zu bekommen:Wie werden mehrere Spalten mit Eloquent gemittelt?

$this->reviews()->avg('communication', 'friendliness') 

Wo Kommunikation und Freundlichkeit sind ein Array von Spaltennamen. Es scheint jedoch, dass die Aggregatfunktionen nur einzelne Spaltennamen unterstützen, also mache ich Folgendes:

Das führt zu mehreren Abfragen. Irgendwelche Vorschläge für eine Best Practice hier?

Dank

Antwort

9

Um mehrere Abfragen zu vermeiden können Sie eine raw database expression innerhalb Eloquent verwenden, wie unten dargestellt:

$averages = $this->reviews() 
    ->select(DB::raw('avg(communication) c, avg(friendliness) f')) 
    ->first(); 

echo $averages->c; 
echo $averages->f; 

Da das Aggregat Funktionsnamen avg von allen unterstützten Datenbank von Laravel erkannt wird, wird dies keine große Sache sein.

+0

Danke - funktioniert ein Vergnügen. –

+0

Toll, danke - kleiner Tippfehler bei DB: roh, sollte DB :: raw - cheers – Leon

+0

Danke, ich habe meine Antwort aktualisiert. –

Verwandte Themen