2014-12-13 7 views
6

Ich habe festgestellt, dass in Laravel bei der Verkettung skip() Sie auch take() verwenden müssen. Ich möchte die ersten n Zeilen überspringen, aber den Rest nehmen. Die Take-Methode erlaubt nur ganze Zahlen, wie kann ich dies tun, ohne auf einen Hacky-Trick zurückzugreifen, wie zum Beispiel eine große Zahl für die Aufnahme anzugeben?Laravel eloquent überspringen n, alle nehmen?

Antwort

14

Grundsätzlich muss bei jedem OFFSET ein LIMIT bereitgestellt werden, damit mysql funktioniert. Daher gibt es keine Möglichkeit, dies zu tun, ohne ein Limit festzulegen. Wir brauchen ein paar PHP Mojo, um hier zu arbeiten.

Nehmen wir an, wir haben eine beredte Klasse namens Attendance. Hier ist, was funktionieren sollte:

//Getting count 
$count = Attendance::count(); 
$skip = 5; 
$limit = $count - $skip; // the limit 
$collection = Attendance::skip($skip)->take($limit)->get(); 
+0

Ich stimme zu. Interessant lesen Sie auch http://stackoverflow.com/questions/255517/mysql-offset-infinite-rows – jhmilan

2

Ich denke, das ist keine gute Antwort, weil Sie zwingt zwei Abfragen zu tun, wird der richtige Weg:

$collection = Attendance::skip($skip)->take($limit)->get(); 
$collection.shift(); 

Sie können mehr über Sammlungen sehen here

+0

Diese Antwort ist richtiger – Oldenborg

+0

Können Sie bitte Ihren Code erklären? –