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.
