📄 Paginación de resultados

📄 Paginación de resultados

Organiza y muestra tus datos fácilmente

Cuando trabajamos con grandes volúmenes de datos, es fundamental mostrar los resultados de manera paginada. Laravel facilita esta tarea con métodos integrados como paginate() y simplePaginate(), que generan automáticamente los enlaces y metadatos necesarios.

📘 Ejemplo básico de paginación

Puedes aplicar la paginación directamente en tus controladores al obtener datos del modelo:

app/Http/Controllers/ProductController.php
public function index()
{
    $products = Product::paginate(10); // 10 resultados por página
    return view('products.index', compact('products'));
}

En tu vista puedes mostrar los enlaces de paginación fácilmente con:

resources/views/products/index.blade.php
<table class="table table-striped">
  <thead>
    <tr><th>ID</th><th>Nombre</th><th>Precio</th></tr>
  </thead>
  <tbody>
    @foreach ($products as $product)
      <tr>
        <td>{{ $product->id }}</td>
        <td>{{ $product->name }}</td>
        <td>{{ $product->price }}€</td>
      </tr>
    @endforeach
  </tbody>
</table>

{{ $products->links() }}

🌐 Paginación en APIs

Laravel también puede paginar resultados en formato JSON. Si estás construyendo una API, simplemente usa el método paginate() dentro de tu controlador API.

app/Http/Controllers/Api/ProductController.php
public function index()
{
    $products = Product::paginate(5);
    return response()->json($products);
}

Esto generará automáticamente un JSON con la estructura:

{
  "current_page": 1,
  "data": [
    { "id": 1, "name": "Televisor", "price": 250 },
    { "id": 2, "name": "Lavadora", "price": 400 }
  ],
  "first_page_url": "http://api.tusitio.com/products?page=1",
  "last_page": 3,
  "per_page": 5,
  "total": 15
}

🎨 Personalizar el estilo de la paginación

Si usas Bootstrap, Laravel puede adaptar automáticamente los estilos. Solo agrega la siguiente línea en tu AppServiceProvider:

app/Providers/AppServiceProvider.php
use Illuminate\Pagination\Paginator;

public function boot(): void
{
    Paginator::useBootstrap();
}

Esto hará que los enlaces de paginación se vean con el estilo de Bootstrap, integrándose perfectamente en tu frontend.

✅ Buenas prácticas

  • Define un número razonable de elementos por página (entre 10 y 25).
  • Evita paginar consultas con joins pesados sin índices adecuados.
  • Usa simplePaginate() cuando no necesites la cuenta total de registros (mejora el rendimiento).
  • Para APIs, incluye siempre los metadatos de paginación en la respuesta JSON.

Publicar un comentario

0 Comentarios