Laravel Tutorials

Fine-tuning Pagination Links in Laravel

Published
Fine-tuning Pagination Links in Laravel image

Laravel's onEachSide method lets you control the number of pagination links displayed around the current page, providing better navigation control for your data sets. Instead of accepting the default number of visible page links, you can customize the display to match your application's needs.

This feature is particularly useful for applications with varying dataset sizes, where you might want to show more navigation options for larger sets while keeping the interface clean for smaller ones.

{{ $posts->onEachSide(3)->links() }}

Here's an example of implementing adaptive pagination:

<?php
 
namespace App\Http\Controllers;
 
use App\Models\Article;
use Illuminate\Http\Request;
 
class ArticleController extends Controller
{
public function index(Request $request)
{
$perPage = $this->determinePerPage($request);
$articles = Article::latest()
->withCount('comments')
->paginate($perPage);
// Adjust visible links based on total pages
$linksToShow = $this->calculateVisibleLinks($articles);
 
return view('articles.index', [
'articles' => $articles->onEachSide($linksToShow)
]);
}
 
private function determinePerPage(Request $request): int
{
return $request->query('show', 10);
}
 
private function calculateVisibleLinks($paginator): int
{
$totalPages = $paginator->lastPage();
 
// Show more links for larger datasets
return match(true) {
$totalPages > 20 => 3, // « 1 ... 4 5 6 7 8 9 10 ... 25 »
$totalPages > 10 => 2, // « 1 ... 4 5 6 7 8 ... 15 »
default => 1 // « 1 2 3 4 5 »
};
}
}

When the page renders, users will see an optimized number of page links based on the total dataset size:

// With 50 total articles (5 pages)
« 1 2 3 4 5 »
// With 150 articles (15 pages)
« 1 ... 4 5 6 7 8 ... 15 »
// With 250 articles (25 pages)
« 1 ... 4 5 6 7 8 9 10 ... 25 »

The onEachSide method helps create cleaner, more intuitive pagination interfaces that adapt to your data.

Harris Raftopoulos photo

Senior Software Engineer • Staff & Educator @ Laravel News • Co-organizer @ Laravel Greece Meetup

Sponsored

masteringlaravel logo
Laravel Code Review

Get expert guidance in a few days with a Laravel code review

Visit Laravel Code Review

The latest

View all →
Look What You Helped Me Build image

Look What You Helped Me Build

Read article
BashBox: A Sandboxed Bash Interpreter for AI Agents in PHP image

BashBox: A Sandboxed Bash Interpreter for AI Agents in PHP

Read article
Running Laravel's Scheduler on Multiple Servers image

Running Laravel's Scheduler on Multiple Servers

Read article
Laravel Fake Assertions Now Accept Property Arrays image

Laravel Fake Assertions Now Accept Property Arrays

Read article
Route::query() and Model defaults() in Laravel 13.35 image

Route::query() and Model defaults() in Laravel 13.35

Read article
Laravel AI SDK 1.1 Adds Agent Skills and Cohere Chat image

Laravel AI SDK 1.1 Adds Agent Skills and Cohere Chat

Read article