¿Qué es la paginación?
La paginación de Laravel se integra con el query builder y Eloquent ORM, y se puede usar sin configuración. La página actual se obtiene automáticamente del parámetropage de la solicitud HTTP y se añade también a los enlaces generados.
El HTML por defecto es compatible con Tailwind CSS, y también hay opción para Bootstrap CSS.
Tres tipos de paginación
Uso básico
Paginación con query builder
Paginación con Eloquent
simplePaginate
Cuando no necesitas la consulta de conteo total (solo “anterior/siguiente”),simplePaginate() es más eficiente.
cursorPaginate (paginación por cursor)
En lugar de OFFSET usa WHERE, por lo que ofrece un gran rendimiento con muchos datos. Es especialmente adecuado para interfaces de scroll infinito.OFFSET vs. cursor
Implementación en el controlador
Mostrar enlaces de paginación en Blade
links() genera automáticamente el HTML de los enlaces. Muestra tres páginas a cada lado de la actual.
Ajustar el número de enlaces
CononEachSide() cambias cuántas páginas se muestran a cada lado.
Recibir el tamaño de página desde la solicitud
Múltiples paginadores en una misma página
Si hay dos paginadores en una misma pantalla, ambos usanpage y entran en conflicto. Cambia el nombre del parámetro con el tercer argumento.
Personalización de la URL
Cambiar la base de la URL
Añadir parámetros de query
Añadir fragmento hash
Respuesta API (JSON)
Al devolver un paginador directamente desde una ruta o controlador, se convierte automáticamente a JSON.Combinación con API Resources
Para envolver el resultado depaginate() en una colección de recurso, pásaselo a UserResource::collection().
UserResource::collection(), la información de paginación se añade automáticamente como metadatos.
El JSON de
cursorPaginate() incluye next_cursor y prev_cursor en lugar de números de página. El cliente API usa esos valores como parámetro cursor en la siguiente solicitud.Vistas de paginación personalizadas
Indicar la vista directamente
Cambiar la vista por defecto
Primero publica las vistas oficiales para personalizarlas.resources/views/vendor/pagination/:
tailwind.blade.php— Por defecto (Tailwind CSS)bootstrap-5.blade.php— Bootstrap 5simple-tailwind.blade.php— Para simplePaginate- …
tailwind.blade.php directamente o crear una nueva vista e indicarla en AppServiceProvider.
Usar Bootstrap CSS
Para usar Bootstrap en lugar de Tailwind, indícalo en elboot() de AppServiceProvider.
Crear un paginador manualmente
Para paginar datos existentes (por ejemplo, un array), instancia directamente la clase.Métodos de instancia habituales
Resumen
Cómo elegir el tipo de paginación
Cómo elegir el tipo de paginación
paginate()— cuando necesitas total y enlaces numerados (pantallas de listado habituales)simplePaginate()— cuando basta con “anterior/siguiente” (más rápido)cursorPaginate()— para grandes volúmenes, scroll infinito o mucha escritura (máximo rendimiento)
Patrón básico en Blade
Patrón básico en Blade
paginate() a la vista y muestra los enlaces con links().
La página actual se detecta automáticamente desde el parámetro page.Paginación en la API
Paginación en la API
Devolver el paginador desde la ruta lo convierte automáticamente a JSON.
Para combinarlo con API Resources, devuelve
UserResource::collection($paginator).
La respuesta contiene data (registros) y varios campos de metadatos.