Skip to main content

Was ist Pagination

Die Pagination von Laravel ist in den Query Builder und das Eloquent ORM integriert und ohne Konfiguration einsatzbereit. Die aktuelle Seite wird automatisch aus dem Query-Parameter page des HTTP-Requests gelesen und den generierten Links auch automatisch hinzugefügt. Das Standard-HTML unterstützt Tailwind CSS; alternativ ist Bootstrap CSS verfügbar.

Drei Arten der Pagination

Grundlagen

Pagination mit dem Query Builder

Pagination mit Eloquent

simplePaginate

Wenn Sie die Gesamtzahl nicht benötigen (und nur „Zurück“- und „Weiter“-Links anzeigen), ist simplePaginate() effizienter.
Wenn Sie keine Anzeige „X von insgesamt Y“ brauchen, wählen Sie simplePaginate(). paginate() führt zusätzlich eine COUNT(*)-Abfrage aus, simplePaginate() ist daher schneller.

cursorPaginate (Cursor-Pagination)

Cursor-Pagination verwendet statt eines OFFSET eine WHERE-Klausel und ist bei großen Datenmengen entsprechend performant. Für Infinite-Scroll-UIs besonders geeignet.
Statt einer Seitennummer enthält die erzeugte URL einen Cursor-String.
Für Cursor-Pagination ist orderBy erforderlich. Zudem muss die Sortierspalte zur paginierten Tabelle gehören.

OFFSET vs. Cursor

Cursor-Pagination nutzt Indizes effektiv und ist auch dann stabil, wenn Datensätze häufig hinzugefügt oder gelöscht werden – Duplikate oder ausgelassene Einträge sind unwahrscheinlicher. Allerdings sind nummerierte Seitenlinks nicht möglich; nur „Zurück“ und „Weiter“.

Umsetzung im Controller

Die Methode links() erzeugt automatisch das HTML für die Seitenlinks. Standardmäßig werden drei Seiten vor und nach der aktuellen Seite angezeigt. Mit onEachSide() legen Sie fest, wie viele Links um die aktuelle Seite herum erscheinen.

Anzahl pro Seite aus dem Request übernehmen

Mehrere Paginatoren auf einer Seite

Zeigen Sie zwei Paginatoren auf derselben Seite an, kollidiert die gemeinsame Nutzung des Parameters page. Über das dritte Argument können Sie den Parameternamen ändern.

URL anpassen

Basis-URL ändern

Query-Parameter anhängen

Hash-Fragment anhängen

API-Antworten (JSON)

Geben Sie einen Paginator direkt aus einer Route oder einem Controller zurück, wird er automatisch in JSON umgewandelt.
Das JSON-Format der Antwort:

Kombination mit API-Ressourcen

Um das Ergebnis von paginate() in eine API-Ressourcen-Collection zu verpacken, übergeben Sie es an UserResource::collection().
Wenn Sie an UserResource::collection() einen Paginator übergeben, werden die Pagination-Informationen automatisch als Metadaten ergänzt.
Im JSON von cursorPaginate() stehen statt Seitennummern die Felder next_cursor und prev_cursor. API-Clients übergeben deren Werte als cursor-Parameter im nächsten Request.

Eigene Pagination-Views

In der View direkt angeben

Standard-View durch eigene Datei ersetzen

Veröffentlichen Sie zunächst die offiziellen Views und passen Sie sie an.
Dabei entstehen in resources/views/vendor/pagination/ u. a. folgende Dateien:
  • tailwind.blade.php — Standard (für Tailwind CSS)
  • bootstrap-5.blade.php — für Bootstrap 5
  • simple-tailwind.blade.php — für simplePaginate
Bearbeiten Sie tailwind.blade.php direkt oder erstellen Sie eine neue View und geben Sie sie im AppServiceProvider an.

Bootstrap CSS verwenden

Wenn Sie statt Tailwind Bootstrap nutzen möchten, konfigurieren Sie das in der Methode boot() des AppServiceProvider.

Paginator manuell erstellen

Um Pagination auf bereits vorhandene Daten (z. B. Arrays) anzuwenden, instanziieren Sie eine Paginator-Klasse direkt.

Häufig verwendete Instanzmethoden

Zusammenfassung

  • paginate() — wenn Gesamtzahl und nummerierte Seitenlinks nötig sind (typische Listenansichten)
  • simplePaginate() — wenn „Zurück“/„Weiter“-Links genügen (schneller)
  • cursorPaginate() — bei großen Datenmengen, Infinite Scroll oder häufigen Schreibvorgängen (beste Performance)
Übergeben Sie das Ergebnis von paginate() an die View und geben Sie mit links() die Seitenlinks aus. Die aktuelle Seite wird automatisch aus dem Query-Parameter page gelesen.
Ein direkt aus einer Route zurückgegebener Paginator wird automatisch in JSON umgewandelt. In Kombination mit API-Ressourcen geben Sie UserResource::collection($paginator) zurück. Die Antwort enthält data (das Datensatz-Array) und diverse Meta-Informationen.
Zuletzt geändert am 13. Juli 2026