Laravel - Gruppe Durch & Key zusammen

Vorausgesetzt, ich habe folgende MySQL-Tabellen darstellen pricebooks, die Elemente und die Beziehungen zwischen Ihnen:

item - item_id|name|...etc
pricebook - pricebook_id|name|...etc

und die folgenden pivot table

pricebook_item - pricebook_id|item_id|price|...etc

Habe ich die Korrelation Eloquent Modelle: Pricebook, Item und ein repository namens PricebookData zum abrufen der notwendigen Informationen.

Innerhalb der PricebookData - repository, die ich brauche, um die pricebook-Daten gruppiert nach pricebook-id und dann sortiert nach item_id für den einfachen Zugriff auf der client-Seite.

Wenn ich das Tue:

Pricebook::all()->groupBy('pricebook_id');

Bekomme ich die Informationen gruppiert nach den pricebook_id aber in jedem pricebook die Schlüssel sind einfache numerische index (es kommt dann als js-array) und nicht die tatsächliche product_id. Also bei der Rückkehr zum client-side Javascript, das Ergebnis kommt wie der folgenden:

pricebookData: {1: [{}, {}, {}...], 2: [{}, {}, {}...]}

Das problem mit den Preisen ankommen, als array, ist, dass ich nicht darauf zugreifen können leicht ohne Durchlaufen des array. Idealerweise würde ich in der Lage sein zu erhalten es als:

 pricebookData: {1: {1001:{}, 1002: {}, 1003: {}}, 2: {1001:{}, 1002: {}, 1003: {}}}
//where 1001, 1002, 1003 are actual item ids
//with this result format, I could simply do var price = pricebookData[1][1001]

Ich habe auch versucht die folgenden, jedoch ohne Erfolg:

Pricebook::all()->keyBy('item_id')->groupBy('pricebook_id');

Dem entspricht, was ich versuche zu vermeiden ist:

$prices = Pricebook::all();
$priceData = [];
foreach ($prices as $price) 
{
   if (!isset($priceData[$price->pricebook_id])) 
   {
      $priceData[$price->pricebook_id] = [];
   }
   $priceData[$price->pricebook_id][$price->item_id] = $price;
}
return $priceData;

Ich bin auf der Suche nach einer reinen eleganten, Eloquenten/Abfrage-generator-Lösung.

InformationsquelleAutor dev7 | 2016-08-02
Schreibe einen Kommentar