Laravel Pagination

Laravel
Tempo de leitura: 4 minutos

Laravel Pagination: A paginação é um recurso essencial em aplicações web que lidam com grandes conjuntos de dados. Ela divide os resultados em páginas menores, melhorando a experiência do usuário e otimizando o desempenho da aplicação. O Laravel oferece uma implementação robusta e fácil de usar para paginação, tanto para consultas com o Query Builder quanto para resultados do Eloquent ORM.

Este artigo explora em detalhes o sistema de laravel pagination, desde a paginação básica até a criação manual de paginadores.

Paginando com o Query Builder

Laravel Pagination: A forma mais simples de paginar resultados com o Query Builder é utilizando o método paginate():

PHP

use Illuminate\Support\Facades\DB;

$users = DB::table('users')->paginate(10); // Pagina os usuários em grupos de 10

O argumento passado para paginate() define o número de itens por página. O método retorna uma instância de Illuminate\Pagination\LengthAwarePaginator, que oferece métodos úteis para exibir os links de paginação.

Você também pode especificar a coluna que será usada para determinar a “página atual” usando o segundo argumento do método paginate():

PHP

$users = DB::table('users')->paginate(10, ['*'], 'usersPage'); // pagina os usuários em grupos de 10, usando o parâmetro 'usersPage' na URL

Paginando Resultados do Eloquent

A paginação com o Eloquent ORM é igualmente simples:

PHP

use App\Models\User;

$users = User::paginate(15); // Pagina os usuários em grupos de 15

Assim como no Query Builder, o método paginate() retorna um LengthAwarePaginator.

Você também pode usar o método simplePaginate() para paginação mais simples, que não calcula o número total de páginas. Isso pode ser útil para conjuntos de dados muito grandes, onde calcular o número total de páginas pode ser custoso.

PHP

$users = User::simplePaginate(15);

Criando um Paginador Manualmente

Em alguns casos, você pode precisar criar um paginador manualmente, por exemplo, ao paginar um array ou uma coleção que não vem diretamente do banco de dados. Para isso, utilize a classe Illuminate\Pagination\Paginator ou Illuminate\Pagination\LengthAwarePaginator:

PHP

use Illuminate\Pagination\Paginator;
use Illuminate\Pagination\LengthAwarePaginator;
use Illuminate\Support\Collection;

$items = collect([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]);
$perPage = 5;
$currentPage = Paginator::resolveCurrentPage('page'); // Obtém o número da página atual da query string

$currentPageItems = $items->slice(($currentPage - 1) * $perPage, $perPage)->values();
$paginatedItems = new LengthAwarePaginator($currentPageItems, count($items), $perPage);

$paginatedItems->setPath(request()->url()); // Define o caminho para os links de paginação

Neste exemplo, criamos um paginador para um array de números, exibindo 5 itens por página.

Exibindo os Resultados da Paginação

Para exibir os resultados e os links de paginação em sua view Blade, utilize os seguintes métodos do objeto LengthAwarePaginator:

  • items(): Retorna os itens da página atual.
  • links(): Renderiza os links de paginação.

Exemplo em uma view Blade:

Blade

@if ($users->count() > 0)
    <ul>
        @foreach ($users->items() as $user)
            <li>{{ $user->name }}</li>
        @endforeach
    </ul>

    {{ $users->links() }}
@else
    <p>Nenhum usuário encontrado.</p>
@endif

O método links() renderiza os links de paginação usando o estilo padrão do Laravel, que é compatível com Tailwind CSS por padrão.

Personalizando os Links de Paginação:

Você pode personalizar a aparência dos links de paginação publicando as views de paginação:

Bash

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

Isso copiará as views de paginação para o diretório resources/views/vendor/pagination, onde você poderá editá-las.

Você também pode usar diferentes estilos de paginação, como Bootstrap:

PHP

{{ $users->links('pagination::bootstrap-5') }}

Para usar o Bootstrap, certifique-se de ter os arquivos CSS e JavaScript do Bootstrap incluídos em seu projeto.

Exemplo Completo: Listando Usuários com Paginação e Filtro

PHP

use App\Models\User;
use Illuminate\Http\Request;

public function index(Request $request)
{
    $query = User::query();

    if ($request->has('search')) {
        $search = $request->input('search');
        $query->where('name', 'like', "%$search%")
              ->orWhere('email', 'like', "%$search%");
    }

    $users = $query->paginate(10);

    return view('users.index', compact('users'));
}
  • View resources/views/users/index.blade.php:

Blade

<form action="{{ route('users.index') }}" method="GET">
    <input type="text" name="search" placeholder="Buscar usuários..." value="{{ request('search') }}">
    <button type="submit">Buscar</button>
</form>

@if ($users->count() > 0)
    <ul>
        @foreach ($users->items() as $user)
            <li>{{ $user->name }} - {{ $user->email }}</li>
        @endforeach
    </ul>

    {{ $users->links() }}
@else
    <p>Nenhum usuário encontrado.</p>
@endif

Este exemplo demonstra como combinar a paginação com filtros de pesquisa, tornando a listagem de usuários mais dinâmica e usável.

Conclusão

Laravel Pagination: A laravel pagination é uma ferramenta poderosa para lidar com grandes conjuntos de dados de forma eficiente e amigável para o usuário. Com as opções de paginação do Query Builder e do Eloquent, além da possibilidade de criar paginadores manuais, o Laravel oferece flexibilidade para atender às diversas necessidades de sua aplicação.

Dominar a paginação é essencial para construir aplicações web modernas e escaláveis. Ao implementar a paginação corretamente, você melhora o desempenho da sua aplicação e proporciona uma melhor experiência para seus usuários.

Mas antes de dominar o Laravel, se for o seu caso, toda jornada tem um início. Vamos entender quais são os conhecimentos básicos necessários para aproveitar ao máximo este poderoso framework. Para iniciar seus estudos no Laravel, você precisará dominar as seguintes tecnologias:

HTML
HTML
CSS
CSS
Javascript
JavaScript

E se você gosta do nosso conteúdo, não deixe de contribuir adquirindo os serviços e produtos dos nossos apoiadores e empresas que somos associados:

Hospedagem Hostinger
Ofertas Amazon
Amazon Prime
Author: Thiago Rossi