paginació en Laravel

📌 Resum de la paginació en Laravel Laravel proporciona diferents maneres d’implementar la paginació en les consultes de base de dades. Aquí tens un resum amb els conceptes clau i els mètodes més utilitzats.


🔹 1. Mètodes de Paginació en Laravel

Laravel ofereix tres tipus de paginació principals en Eloquent i Query Builder:

✅ paginate()

  • Retorna un objecte LengthAwarePaginator amb tots els detalls de la paginació (pàgina actual, total d’elements, etc.).
  • És útil quan necessites mostrar enllaços de pàgina (links()).
  • Exemples:
  • $posts = Post::paginate(10); // Retorna 10 resultats per pàgina

✅ simplePaginate()

  • Retorna un objecte Paginator, que és més lleuger però només permet avançar o retrocedir (sense veure el total de pàgines).
  • Útil si no necessites saber quantes pàgines hi ha.
  • Exemple:
  • $posts = Post::simplePaginate(10);

✅ cursorPaginate()

  • Utilitza paginació basada en id o timestamps en lloc de LIMIT/OFFSET, cosa que és més eficient per bases de dades grans.
  • No permet anar enrere, només avançar.
  • Exemple:
  • $posts = Post::orderBy('id')->cursorPaginate(10);

🔹 2. Mostrar la Paginació a la Vista (Blade)

Un cop tens la paginació en el controlador, has d’afegir links() a la vista per mostrar els enllaços de navegació.

Bàsic

{{ $posts->links() }}

Amb Tailwind (Laravel 8+)

Si fas servir Tailwind CSS, pots especificar el disseny de la paginació:

{{ $posts->links('pagination::tailwind') }}

Mantenir paràmetres de cerca en la paginació

Si filtres per categoria, etiqueta o altres criteris, has de passar els paràmetres a les pàgines següents amb appends():

{{ $posts->appends(request()->query())->links() }}

🔹 3. Paginació amb Query Builder

Si utilitzes Query Builder en comptes d’Eloquent, pots paginar les consultes així:

$posts = DB::table('posts')->paginate(10);

🔹 4. Verificar si la Paginació Existeix a la Vista

Si vols evitar errors, pots comprovar que $posts sigui un Paginator abans de cridar links():

@if ($posts instanceof \Illuminate\Pagination\LengthAwarePaginator)
    {{ $posts->links() }}
@endif

🔹 5. Personalitzar la Paginació

Si vols modificar l’aspecte de la paginació, pots publicar les vistes de la paginació de Laravel:

php artisan vendor:publish --tag=laravel-pagination

Això generarà les vistes de la paginació a resources/views/vendor/pagination/, on podràs modificar els fitxers.

📌 Conclusió

  • Usa paginate() per defecte per obtenir una paginació completa.
  • appends(request()->query()) és necessari per mantenir els filtres en la paginació.
  • Tailwind està suportat per defecte amb links('pagination::tailwind').
  • Personalitza la paginació si cal publicant les vistes.

Amb aquest resum ja tens una base sòlida per implementar paginació a qualsevol projecte Laravel! 🚀