2017-08-19 7 views
0

Ich habe ein Modell Order wie so genannt:Laravel: Gruppierung von Zeilen

class Order extends Model 
{ 
    public function offer() 
    { 
    return $this->belongsTo(Offer::class); 
    } 
} 

Beispiel Zeilen wie diese

aussehen
id quantity offer_id 
15 5   20 
20 1   21 
25 3   20 
30 2   27 
35 1   20 
40 1   21 

ich gruppieren möchten alle Aufträge von offer_id Laravel Eloquent mit geben, die folgende Ausgabe:

[ 
    [20] => [ 
     // order 15, 
     // order 25, 
     // order 35, 
    ], 
    [21] => [ 
     // order 20, 
     // order 40, 
    ] 
    [27] => [ 
     // order 30, 
    ] 
] 

Wie kann ich das effizient machen? Ich habe folgendes versucht:

Order::groupBy('offer_id)->get(); 

Aber dies ist nur versteckt Aufträge mit den gleichen offer_id.

Beachten Sie, dass ich im Idealfall dies alles in Laravel Elqouent tun werde, im Gegensatz zu etwas Post-Processing.

+0

Wie wäre es 'Auftrag gefunden :: get() -> groupBy (‚OFFER_ID‘)', bearbeitet diese die Sammlung, nachdem er abgeholt wurde, aber das tut, was Sie wollen (wie [hier dokumentiert ] (https://laravel.com/docs/5.4/collections#available-methods) – milo526

Antwort

1

Die Laravel-Sammelmethode groupBy tut genau dies.

Die groupBy Methode Gruppen Element der Kollektion durch einen bestimmten Schlüssel:

$orders = Order::get()->groupBy('offer_id'); 

Dies funktioniert, da die Query Builder eine Auflistung zurückgibt, können Sie die Sammlung Helfer auf diese Objektkette die gewünschte erhalten Ergebnis.

Dokumentation auf der Laravel site

0

Können Sie dies nicht tun, indem Sie alle Angebote erhalten, die Bestellungen haben? , d.h. Offer->with('order')->orderBy('offer_id')->get()

Verwandte Themen