En este post te voy a mostrar cómo puedes realizar una paginación en Laravel; es decir, mostrar registros (de la base de datos) por página, en lugar de mostrarlos todos a la vez.
Laravel ya provee una manera realmente sencilla de agregar paginación, incluso da la opción de agregar los enlaces a la página, y por supuesto, también permite cosas como la búsqueda u otros métodos del Query Builder, todo esto sin escribir ninguna consulta SQL manual.
Paginación simple

Si simplemente quieres paginar tus resultados, invoca a paginate
de tu modelo y pásale como argumento cuántos elementos quieres por página.
Por ejemplo, yo tengo mi modelo llamado Producto
:
Ahora en mi controlador para enviarlo a la vista, indico el uso del namespace:
use App\Producto;
Y para paginar, envío los resultados así:
En este caso estoy paginando cada 5 registros. Ahora en mi vista los dibujo en una tabla; puedo iterarlos fácilmente con un foreach
:
Además, si quiero que se muestren los enlaces para navegar a las distintas páginas (por defecto Laravel genera el HTML para Bootstrap) invoco a links
justo abajo de mi tabla:
{{$productos->links()}}
El código completo queda así:
Si te fijas, toma el número de página de la URL. Por ejemplo, lo siguiente muestra la página 2:
http://localhost/nombre_de_tu_proyecto/public/productos?page=2
Fíjate en el parámetro de page
que está en 2
.
Paginación con búsqueda
Si quieres agregar filtros o aprovechar lo que ofrece el query builder, puedes invocar a varios métodos y al final paginar con paginate
.
Por ejemplo, supongamos que quieres filtrar los productos por búsqueda basándote en una variable de la URL, y que los quieres ordenar por descripción.
En este caso podemos invocar a todos los métodos para hacer consultas de SQL. Por ejemplo, estamos invocando a orderBy
y a where
; pero al final obtenemos los resultados con paginate
.
Todo sigue funcionando igual, haya búsqueda o no, y los links también funcionan. Si hay menos resultados para la búsqueda, el número de enlaces para páginas cambiará, es decir, se toman en cuenta todos los filtros y el total de registros devueltos.
Si no usas bootstrap
En caso de que no utilices el framework Bootstrap o quieras mostrar los enlaces de manera manual, también es posible. Puedes obtener el total de elementos accediendo a total
, así:
$productos->total();
Para saber cuántos mostrar por página (aunque eso también se define al invocar a paginate
, pero esto funciona para hacerlo desde la vista) invoca a perPage
.
Ya con esto puedes obtener las páginas así:
$paginas = ceil($productos->total() / $productos->perPage()
Y hacer un ciclo for que muestre los enlaces desde 1 hasta el total de páginas, justo como lo detallo en mi post de paginación manual de registros con PHP.
Recuerda que en este caso $productos
es lo que devuelve el método paginate
al invocarlo sobre un modelo.
Si te gusta este framework, te invito a ver más sobre Laravel en mi blog.
buen articulo
Excelente hermano, muchas gracias por tus conocimientos, que Dios le siga bendiciendo…