2016-11-07 11 views
2

Ich habe ein Problem mit whereIn. Mein Code sieht wie folgt ausLaravel 5.3 WhereIn gibt eindeutiges Ergebnis zurück

$arrayKeys = [1, 2, 1, 4, 5, 1]; 
    $products = \App\Product::whereIn('id', $arrayKeys) 
        ->select(['id', 'name', 'outright_price', 'discount', ]) 
        ->with('photo', 'colors') 
        ->get(); 

Es gibt nur die eindeutige ID 1, 2, 4, 5. Ich brauche es zurück 1, 2, 1, 4, 5, 1. Wie es zu tun? Ich habe keine Ahnung.

+0

Was meinst du damit nur 1,2,4,5 zurück? Du meinst Aufzeichnungen 1, 2, 4 und 5? – Birdy

+0

Ja, die Datensätze aus der Datenbank. – Rbex

+0

Ich habe die Datensätze ID 1, 2, 4, 5, aber ich brauche 1, 2, 1, 4, 5, 1. Ich denke, es kann nicht von wo gemacht werden, aber wie kann ich diese Aufzeichnungen erreichen? Vielen Dank. – Rbex

Antwort

4

Es ist normal, denn es gibt nur eine Zeile mit ID = 1. Wenn aus irgendeinem Grund wollen Sie immer noch eine Sammlung mit [1, 2, 1, 4, 5, 1] IDs Struktur zu erhalten, müssen Sie es manuell erstellen, indem collect() und merge() mit:

$arrayKeys = [1, 2, 1, 4, 5, 1]; 

$products = collect([]); 

$productData = \App\Product::whereIn('id', $arrayKeys) 
     ->select(['id', 'name', 'outright_price', 'discount']) 
     ->with('photo', 'colors') 
     ->get(); 

foreach ($arrayKeys as $key) { 
    $products = $products->merge($productData->where('id', $key)); 
} 

dd($products); 

Ich habe es getestet und es funktioniert.

+3

Beat mich dazu! gab nur praktisch die gleiche Antwort ein! +1 – Birdy

+0

Danke, es ist in Ordnung, mehrere Abfragen zu erstellen. – Rbex

+1

@Rbex, Ich habe einen besseren Weg gefunden, wenn es nicht mehrere ähnliche Abfragen erstellen wird (naja, es wird 3 wegen eifrigen Laden statt 18 in der ersten Variante). Ich habe meinen Code aktualisiert. In diesem Code fragen Sie nur einmal ab, um die Daten abzurufen, und erstellen dann manuell eine neue Sammlung aus diesen Daten. –

Verwandte Themen