2016-11-22 3 views
0

Dieser Code gibt mir ein paginiertes Ergebnis-Set mit zusätzlichen Informationen - Anzahl der Datensätze, Datensätze pro Seite, URL der nächsten Seite usw. Ich will das alles. Aber ich möchte auch die Hauptergebnismenge nach ID eingeben, anstatt nur ein numerisches Array zu bekommen.Abfragegenerator - wie paginate und keyBy verketten?

$laptops = Laptop::addJoins()->filterResults($request)->selectListCols()->paginate(50); 

Ist das möglich? Ich habe versucht, am Ende keyBy('id') verketten, was zu einem verschlüsselten Objekt führte, aber ohne die Paginierung Informationen.

Antwort

1

Sie diese Sammlung von id verkeilt zu erhalten:

$laptopsCollection = $laptops->getCollection()->keyBy('id'); 

Wenn Sie Sammlung von paginator verwendet aktualisieren möchten selbst (so alle Paginierung info noch zugänglich ist) zu tun, dass danach:

$laptops->setCollection($laptopsCollection); 
+0

Ehrfürchtig - Vielen Dank! Ich habe keine Ahnung, wie ich das eigentlich wissen sollte. Ich kann nirgendwo in der Dokumentation eine getCollection() -Methode sehen. – daninthemix

+0

Normalerweise 'dd ($ laptops)', um den Klassennamen 'Paginator' zu sehen, dann öffne die entsprechende Datei' vendor/laravel/framework/src/Illuminate/Pagination/Paginger.php' und erkunde, welche Leckereien sich verstecken, oft graben down-through Klassen erweitert es in diesem Fall 'vendor/laravel/framework/src/Illuminate/Pagination/AbstractPaginator.php'. – Paul

+0

Tut mir leid, dass ich das wieder aufbringe, aber die obigen beiden Aussagen scheinen mit der Reihenfolge der Ergebnisse zu verwechseln. Wenn ich also eine sortBy() - Klausel in meinem Abfrage-Generator habe, ruiniert die obige Sortiermethode die Methoden getCollection und setCollection. Hast du eine Idee, wie du das lösen kannst? – daninthemix