Skip to main content

Wat is paginatie

De paginatie van Laravel is geïntegreerd met de querybuilder en Eloquent ORM en je kunt er zonder configuratie mee aan de slag. De huidige pagina wordt automatisch afgeleid uit de queryparameter page van het HTTP-verzoek en wordt ook automatisch toegevoegd aan de gegenereerde links. De standaard-HTML is geschikt voor Tailwind CSS; je kunt ook kiezen voor Bootstrap CSS.

Drie soorten paginatie

Basisgebruik

Paginatie met de querybuilder

Paginatie met Eloquent

simplePaginate

Als de count-query voor het totale aantal niet nodig is (alleen “vorige”- en “volgende”-links tonen), is simplePaginate() efficiënter.
Heb je geen weergave nodig in de trant van “record X van Y in totaal”, kies dan simplePaginate(). Omdat paginate() een extra COUNT(*)-query uitvoert, is simplePaginate() sneller.

cursorPaginate (cursorpaginatie)

Cursorpaginatie gebruikt een WHERE-clausule in plaats van een OFFSET-clausule en levert daardoor hoge prestaties bij grote hoeveelheden data. Het is bijzonder geschikt voor UI’s met infinite scroll.
De gegenereerde URL bevat geen paginanummer maar een cursorstring.
Voor cursorpaginatie is orderBy verplicht. Bovendien moeten de sorteerkolommen tot de gepagineerde tabel behoren.

OFFSET versus cursor

Cursorpaginatie benut indexen effectief en heeft als voordeel dat er minder snel dubbele of ontbrekende records optreden wanneer data vaak wordt toegevoegd of verwijderd. Je kunt echter geen paginanummerlinks genereren; alleen “vorige” en “volgende”.

Implementatie in een controller

De links()-methode genereert automatisch de HTML van de paginalinks. Er worden links getoond voor drie pagina’s vóór en na de huidige pagina. Met onEachSide() wijzig je hoeveel links vóór en na de huidige pagina worden getoond.

Het aantal per pagina uit het request halen

Meerdere paginators op één pagina tonen

Als je twee paginators op hetzelfde scherm toont, botsen ze wanneer beide de page-parameter gebruiken. Wijzig de parameternaam via het derde argument.

URL’s aanpassen

De basis-URL wijzigen

Queryparameters toevoegen

Een hashfragment toevoegen

API-responses (JSON-uitvoer)

Als je een paginator rechtstreeks vanuit een route of controller teruggeeft, wordt hij automatisch naar JSON geconverteerd.
Het JSON-formaat van de response:

Combineren met API-resources

Als je het resultaat van paginate() wilt wrappen in een API-resourcecollectie, geef je het door aan UserResource::collection().
Als je een paginator doorgeeft aan UserResource::collection(), wordt de paginatie-informatie automatisch als metadata toegevoegd.
De JSON van cursorPaginate() bevat geen paginanummers maar next_cursor en prev_cursor. API-clients gebruiken deze waarden als cursor-parameter voor het volgende verzoek.

Aangepaste paginatieviews

Direct in het viewbestand opgeven

De standaardview wijzigen naar een aangepast bestand

Publiceer eerst de officiële views en pas ze daarna aan.
In resources/views/vendor/pagination/ worden de volgende bestanden aangemaakt.
  • tailwind.blade.php — standaard (voor Tailwind CSS)
  • bootstrap-5.blade.php — voor Bootstrap 5
  • simple-tailwind.blade.php — voor simplePaginate
Bewerk tailwind.blade.php rechtstreeks, of maak een nieuwe view en stel die in via de AppServiceProvider.

Bootstrap CSS gebruiken

Gebruik je Bootstrap in plaats van Tailwind, dan stel je dat in via boot() in de AppServiceProvider.

Handmatig een paginator maken

Wil je paginatie toepassen op bestaande data zoals een array, dan instantieer je de paginatorklasse rechtstreeks.

Veelgebruikte instantiemethodes

Samenvatting

  • paginate() — wanneer je het totale aantal en paginanummerlinks nodig hebt (gangbare lijstschermen)
  • simplePaginate() — wanneer alleen “vorige”- en “volgende”-links volstaan (snel)
  • cursorPaginate() — bij grote hoeveelheden data, infinite scroll of frequente schrijfacties (beste prestaties)
Je geeft simpelweg het resultaat van paginate() door aan de view en voert de paginalinks uit met links(). De huidige pagina wordt automatisch gedetecteerd via de queryparameter page.
Geef je een paginator rechtstreeks terug vanuit een route, dan wordt hij automatisch naar JSON geconverteerd. Om te combineren met API-resources geef je UserResource::collection($paginator) terug. De response bevat data (de array met records) en diverse metadata.
Laatst gewijzigd op 6 september 2026