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

acquaintsoft logo
Acquaint Softtech

Hire Laravel developers with AI expertise at $20/hr. Get started in 48 hours.

Visit Acquaint Softtech

The latest

View all →
PayZephyr: One Payment API for Stripe, Paystack, and PayPal image

PayZephyr: One Payment API for Stripe, Paystack, and PayPal

Read article
Bifrost Turns One With AI Builds and New Workflows image

Bifrost Turns One With AI Builds and New Workflows

Read article
Preview Blade Templates in macOS Finder with Quick Blade image

Preview Blade Templates in macOS Finder with Quick Blade

Read article
Artisan Debugging Commands in Laravel Telescope 5.24.0 image

Artisan Debugging Commands in Laravel Telescope 5.24.0

Read article
Queue totalSize() and JobInterrupted Event in Laravel 13.31 image

Queue totalSize() and JobInterrupted Event in Laravel 13.31

Read article
Find Unexpected Test Inputs with Fuzz for Pest image

Find Unexpected Test Inputs with Fuzz for Pest

Read article