2017-05-10 6 views
0

Ich habe die folgende Abfrage:Laravel Eloquent - Eager Loading Abfrage wird durch Begrenzung beschränkt zu sein()

MyTable::where('my_column', '=', 25)->with('myOtherTable') 
            ->orderBy('id', DESC)->limit(5); 

Ich würde die oben möchte mich auf die folgenden rohen SQL-Abfrage analogoous Ergebnisse zu bringen:

SELECT * 
FROM myTable AS ABB1 
    LEFT JOIN myOtherTable AS ABB2 ON ABB1.id = ABB2.myTable_id 
WHERE my_column = 25 
ORDER BY myTable.id DESC 
LIMIT 5; 

Die oben wird alles in myTable zusammen mit entsprechenden Informationen von myOtherTable und dann Grenze um die Ergebnisse zu 5 Zeilen finden.

Wenn ich die eloquent-Anweisung oben ausführen, werden zwei SQL-Abfragen verarbeitet. Die erste sieht ungefähr so ​​aus:

SELECT * 
FROM myTable 
WHERE my_column = 25 
ORDER BY id DESC; 

Wenn diese Abfrage zurückgibt 7 Ergebnispositionen sagen, aber ich gehe in eine kleinere Zahl in die limit() Funktion (. Dh limit(5)), dann die entsprechenden eifrig Lade Abfrage wie folgt aussehen:

SELECT * 
FROM myOtherTable 
WHERE id IN(1, 2, 3, 4, 5); 

Die Eager-Ladeabfrage ist selbst auf 5 Elemente beschränkt. Hier sollten keine Grenzen gesetzt sein. Die Anzahl der Elemente in der obigen Bedingung IN sollte 7 sein (oder was immer die von der ersten Abfrage zurückgegebene Anzahl ist). Das Limit sollte nur angewendet werden, nachdem die zweite Abfrage ausgeführt wurde.

Wie würde ich das mit Eloquent tun?

Antwort

0

Sie können eloquent join verwenden.

MyTable::join('myOtherTable', 'column_id', '=', 'id') 
    ->where('my_column', '=', 25) 
    ->with('myOtherTable') 
    ->orderBy('id', DESC) 
    ->limit(5); 

Die with ist nur, wenn Sie die Beziehung auf MyTable zu eifrig Last wollen.