2016-05-28 15 views
1

Ich habe som Ergebnisse mehrere Tabelle, ausgewählt vonSum und Reihenfolge von desc mit Query Builder (Laravel)

$places = Place::with(['rates' => function($query) 
    { 
     $query->select('id', 'place_id', 'criterion_id', 'value'); 

    }])->select('id', 'coords')->get(); 

Ich brauche diese reslut durch Summe bestellen (oder avg) von Werten. Wie kann ich das machen? Ich habe versucht,

$query->select('id', 'place_id', 'criterion_id', 'value')->sum('value'); 

zu verwenden, aber es funktioniert nicht.

I have such table

+0

Bitte die entsprechenden Datenbanktabellen und Felder hinzufügen. Erzählen Sie uns auch eine Probe des von Ihnen erwarteten Ergebnisses. Vielen Dank! –

+0

@Milz Probe des Ergebnisses auf Screenshot – sqlnoob

+1

Großartig, dass Sie die Ergebnisse hinzugefügt, aber @Milz bedeutete, dass Sie die gewünschten Ergebnisse zeigen sollten, nicht die Ergebnisse, die Sie erhalten. –

Antwort

0

Wenn es dir funktioniert. Sie können JOIN anstelle von Eager Loading verwenden.

Der Code wird wie folgt sein:

Place::leftJoin('rates', 'places.id', '=', 'rates.place_id') 
      ->selectRaw('places.*, SUM(rates.value) as sumOfRateValues') 
      ->groupBy('places.id') 
      ->orderBy('sumOfRateValues', 'DESC') 
      ->get(); 
+0

Du bist der Beste! – sqlnoob

0

könnten Sie ziehen nur alle Informationen, die Sie brauchen, und dann sum oder avg verwenden, wenn Sie es brauchen, oder es als eine Variable nach der Abfrage setzen es um Ihre Ansicht zu übergeben.

Zum Beispiel:

$places = Place::with(['rates' => function($query) 
    { 
     $query->select('id', 'place_id', 'criterion_id', 'value'); 

    }])->select('id', 'coords')->get(); 

$sum = $places['rates']->sum('value'); 
$avg = $places['rates']->avg('value'); 

Oder wenn Sie für jedes Element, um es aus Ihrer Sicht tun:

@foreach ($places as $place) 
{{ $place->rates->sum('value') }} 
{{ $place->rates->avg('value') }} 
@endforeach 
0

Die einfachste (aber nicht die beste) Lösung wäre Sammlung zu sortieren, wie Sie möchten, wie folgt:

Die beste Lösung wäre, Raten Tabelle und sortieren nach Aggregat wiezu verbinden.

Verwandte Themen