2016-07-19 33 views
1

Ich möchte die Anzahl der Ergebnisse von einer Neoeloquent Abfrage begrenzen, Take() funktioniert gut, aber ich weiß nicht, wie ich skip() verwenden soll? Ich lese die laravel 5.2 Do c. Ich versuche skip (10) -> take (10) zu benutzen, aber es steht "Method skip does not exist". hier mein Code:Wie verwende ich skip/take in Vinelab/Neoeloquent Abfragen: PHP

$artifact=Models\Artifact::where('aid',$request->aid)->first(); 
$comments=$artifact->comments->take(10); 

Antwort

0

ok, fand ich eine Antwort auf meine eigene Frage, da die Ergebnismenge von $ artifact-> Kommentare ist ein Laravel collection, kein Überspringen() -Methode ist. mit einer anderen Methode namens slice() könnte ich das Problem lösen und meine gewünschte Teilmenge des Ergebnisses erhalten. Jetzt habe ich:

$comments=$artifact->comments->slice($startOffset, $count); 

was gut funktioniert. Eine andere Methode namens splice() gibt ähnliche Werte zurück, aber bitte beachten Sie, dass sie die ursprüngliche Ergebnismenge ändert.

+0

Beachten Sie, dass hier Sie alle Artefakt Kommentare sind holen und eine Reihe von ihnen zu nehmen, wenn Sie es wünschen für die Abfrage, um Sie die genaue Anzahl sofort zu bekommen, müssen Sie etwas tun wie $ Artefakt-> Kommentare() -> take (10) -> überspringen (5) -> get(); ' – Mulkave

+0

danke @Mulkave Sie ' Richtig und genau das suche ich. Ihre Lösung ist effizienter als meine, besonders wenn es viele Kommentare zu einem Artefakt gibt. Es ist sehr wahrscheinlich in der Anwendung, die ich entwickle. Du hast mich gerettet. Danke noch einmal. – Omid

+0

großartig zu hören! Ich werde das als Antwort auf die Frage stellen. – Mulkave

1

Mit der Antwort, die Sie zur Verfügung gestellt haben, was passiert ist, dass Sie alle Kommentare abholen werden, also mit einer großen Anzahl von ihnen wird es ein Engpass für die Leistung sein, besonders, dass Sie nicht alle von ihnen brauchen. Was können Sie tun, ist die Verwendung limit und offset auf der Abfrage mit den Methoden take und skip jeweils wie folgt:

$comments = $artifact->comments()->take(10)->skip(5)->get()