Skip to main content

Cos’è la paginazione

La paginazione di Laravel è integrata con Query Builder ed Eloquent ORM e si può usare senza configurazioni. La pagina corrente viene letta automaticamente dal parametro di query page della richiesta HTTP e aggiunta automaticamente ai link generati. L’HTML predefinito è compatibile con Tailwind CSS; puoi scegliere anche Bootstrap CSS.

Tre tipi di paginazione

Uso di base

Paginazione con Query Builder

Paginazione con Eloquent

simplePaginate

Quando non serve la query di conteggio totale (mostri solo i link “precedente” e “successivo”), è più efficiente usare simplePaginate().
Se non ti serve mostrare “elemento N di M totali”, scegli simplePaginate(). paginate() esegue una query COUNT(*) aggiuntiva, quindi simplePaginate() è più veloce.

cursorPaginate (paginazione a cursore)

La paginazione a cursore usa una clausola WHERE al posto di OFFSET, offrendo prestazioni elevate su grandi volumi di dati. Particolarmente adatta a UI a scroll infinito.
Gli URL generati contengono una stringa di cursore invece del numero di pagina.
Per usare la paginazione a cursore è obbligatorio orderBy. Inoltre, la colonna di ordinamento deve appartenere alla tabella oggetto della paginazione.

Confronto tra OFFSET e cursore

La paginazione a cursore sfrutta gli indici in modo efficace e riduce il rischio di duplicazioni o omissioni di record anche in presenza di inserimenti e cancellazioni frequenti. Non genera però link ai singoli numeri di pagina: solo “precedente” e “successivo”.

Implementazione nel controller

Il metodo links() genera automaticamente l’HTML dei link. Vengono mostrati i link alle 3 pagine prima e dopo la pagina corrente. Con onEachSide() puoi cambiare il numero di link mostrati prima e dopo la pagina corrente.

Ricevere dalla richiesta il numero di elementi per pagina

Mostrare più paginator nella stessa pagina

Se hai due paginator sulla stessa schermata, entrambi usano il parametro page andando in conflitto. Cambia il nome del parametro con il terzo argomento.

Personalizzazione degli URL

Cambiare l’URL base

Aggiungere parametri di query

Aggiungere un frammento hash

Risposta API (output JSON)

Restituendo il paginator direttamente da una route o controller, viene convertito automaticamente in JSON.
Formato JSON della risposta:

Combinazione con le API resource

Per incapsulare il risultato di paginate() in una API resource collection, passalo a UserResource::collection().
Passando il paginator a UserResource::collection(), le informazioni di paginazione vengono aggiunte automaticamente come metadati.
Nel JSON di cursorPaginate() non ci sono numeri di pagina ma next_cursor e prev_cursor. Il client API usa questi valori come parametro cursor della richiesta successiva.

Viste di paginazione personalizzate

Specificare direttamente il file della vista

Cambiare la vista predefinita con un file personalizzato

Pubblica prima le viste ufficiali e poi personalizzale.
In resources/views/vendor/pagination/ vengono generati i seguenti file:
  • tailwind.blade.php — predefinito (per Tailwind CSS)
  • bootstrap-5.blade.php — per Bootstrap 5
  • simple-tailwind.blade.php — per simplePaginate
Modifica direttamente tailwind.blade.php oppure crea una nuova vista e indicala in AppServiceProvider.

Usare Bootstrap CSS

Se al posto di Tailwind usi Bootstrap, configuralo in boot() di AppServiceProvider.

Creazione manuale di un paginator

Se vuoi paginare dati esistenti come un array, istanzia direttamente la classe paginator.

Metodi d’istanza comuni

  • paginate() — Quando servono totale e link ai numeri di pagina (schermate a lista comuni)
  • simplePaginate() — Quando bastano i soli link “precedente” e “successivo” (più veloce)
  • cursorPaginate() — Con grandi volumi di dati, scroll infinito o scritture frequenti (massime prestazioni)
Passa il risultato di paginate() alla vista e usa links() per emettere i link alle pagine. La pagina corrente viene rilevata automaticamente dal parametro di query page.
Restituendo direttamente il paginator dalla route, viene convertito automaticamente in JSON. Per combinarlo con le API resource restituisci UserResource::collection($paginator). La risposta contiene data (array di record) e vari metadati.
Ultima modifica il 13 luglio 2026