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.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, was Sie wollen, ist
Ihnen erste Gruppe von Pricebook, dann jede Pricebook Teilmenge der getastet ist, durch item_id. Sie waren auf dem richtigen Weg mit
leider, wie es umgesetzt wird, ist die
groupBy
setzt vorherigen Schlüssel.Update:
(
groupBy
zweite parameter$preserveKeys
)