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:
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: