laravel pagination | java php laravel linux mysql sql bootstrap html css query java php laravel linux mysql sql bootstrap html css query: laravel pagination

Sunday, April 12, 2026

laravel pagination

📚 Seri Belajar Laravel Lengkap — Artikel 27 dari 50

Pagination di Laravel: Tampilkan Data Banyak dengan Elegan 🚀

Ribuan baris data dalam satu halaman? Itu resep bencana. Pelajari cara pagination Laravel yang bikin aplikasimu profesional — dan pahami hubungannya dengan sistem autentikasi Laravel Breeze di project nyata.

#Laravel #Pagination #PHP #Eloquent #WebDev
⏱️
Estimasi Baca
12 Menit
🎯
Level
Intermediate
📅
Update
2025
🔥
Laravel
v11.x

Bayangkan kamu masuk ke perpustakaan besar — dan semua 50.000 buku dijejalkan ke satu meja. Kacau, kan? Nah, itulah yang terjadi kalau kamu nampilkan ribuan data sekaligus tanpa pagination. Lambat, berat, dan penggunanya kabur. Di artikel ke-27 dari seri 50 Artikel Belajar Laravel ini, kita bakal belajar cara bikin pagination yang rapi dan elegan. Topik ini juga relevan banget buat kamu yang sedang membangun fitur manajemen user dengan sistem autentikasi Laravel Breeze — karena list user butuh pagination!

Tenang, Laravel sudah menyiapkan senjata pagination yang powerful banget — tinggal pakai, dan hasilnya langsung kece. Yuk, kita bedah tuntas dari dasar sampai advanced!

📖 Definisi Konsep

Pagination adalah teknik membagi dataset besar menjadi beberapa halaman kecil yang bisa dinavigasi pengguna. Di Laravel, mekanisme ini didukung secara native oleh Eloquent ORM dan Query Builder, sehingga implementasinya cukup satu baris kode: ->paginate(10).

1. Kenapa Pagination Itu Wajib? (Bukan Sekedar Fitur Opsional)

Sebelum kita koding, penting banget untuk paham why-nya dulu. Coba bayangkan aplikasi manajemen artikel blog dengan 10.000 post. Kalau kamu pakai ->get() biasa, maka:

Aspek Tanpa Pagination Dengan Pagination
⚡ Kecepatan Load Sangat lambat (load semua) Cepat (load per chunk)
🧠 Memory Server Tinggi, boros RAM Efisien, hemat resource
👤 User Experience Scroll tak berujung Navigasi terstruktur
🔍 SEO Buruk (page load lambat) Lebih baik + URL terindeks
🔧 Maintenance Sulit dikelola Mudah, terorganisir
🔥
Fakta Menarik

Google merekomendasikan waktu load halaman di bawah 3 detik. Halaman yang memuat 10.000 record sekaligus bisa mencapai 10–30 detik. Dengan pagination 15 item per halaman, waktu load bisa turun drastis ke bawah 1 detik!

2. Tiga Jenis Pagination di Laravel — Pilih yang Tepat!

Laravel tidak hanya punya satu cara pagination — ada tiga metode dengan karakteristik berbeda. Di project yang menggunakan autentikasi Laravel Breeze, kamu paling sering butuh metode pertama dan kedua. Berikut penjelasannya:

🔬 Analisis: Perbandingan Metode Pagination
PALING POPULER ->paginate(n)

Menampilkan navigasi halaman lengkap (Previous, 1, 2, 3, ..., Next). Menghitung total data dengan COUNT query. Cocok untuk admin panel dan daftar data yang perlu navigasi halaman.

EFISIEN ->simplePaginate(n)

Hanya tampilkan tombol Previous & Next. Tidak menghitung total data — lebih ringan secara query. Ideal untuk feed, timeline, atau data dengan jumlah sangat besar.

API / CURSOR ->cursorPaginate(n)

Menggunakan kursor (pointer) alih-alih nomor halaman. Sangat performa untuk dataset raksasa dan real-time data. Sering dipakai di REST API dengan infinite scroll.

3. Implementasi Pagination Laravel: Step-by-Step

Oke, sekarang waktunya coding! Kita akan buat fitur daftar artikel (posts) dengan pagination. Ini adalah skenario paling umum di project Laravel, termasuk yang sudah dilengkapi autentikasi Laravel Breeze.

1

Siapkan Model & Migrasi

Pastikan kamu sudah punya model Post. Kalau belum, jalankan perintah berikut:

terminal
$ php artisan make:model Post -m
2

Update Controller dengan paginate()

Buka PostController.php dan ubah method index():

PostController.php
<?php

namespace App\Http\Controllers;

use App\Models\Post;

class PostController extends Controller
{
    public function index()
    {
        // Ambil 10 post per halaman, urut terbaru
        $posts = Post::latest()->paginate(10);

        return view('posts.index', compact('posts'));
    }
}
💡
Tips Pro

Kamu bisa chain method lain sebelum paginate() seperti biasa! Contoh: Post::where('status', 'published')->latest()->paginate(10) — filter dan pagination bekerja bersamaan tanpa masalah.

3

Tampilkan di Blade View

Di file resources/views/posts/index.blade.php:

index.blade.php
<!-- Loop semua post -->
@foreach ($posts as $post)
    <div class="card mb-3">
        <h5>{{ $post->title }}</h5>
        <p>{{ $post->excerpt }}</p>
    </div>
@endforeach

<!-- Tombol Navigasi Halaman (Magic! ✨) -->
{{ $posts->links() }}
4

Aktifkan Bootstrap Pagination (AppServiceProvider)

Secara default, $posts->links() menggunakan Tailwind CSS. Kalau project kamu pakai Bootstrap (umum di proyek yang menggunakan Breeze), tambahkan ini di AppServiceProvider.php:

AppServiceProvider.php
use Illuminate\Pagination\Paginator;

public function boot(): void
{
    // Pilih tampilan Bootstrap atau Tailwind
    Paginator::useBootstrapFive(); // Bootstrap 5
    // ATAU:
    // Paginator::useTailwind(); // Untuk Tailwind CSS
}
Insight Penting — Breeze & Pagination

Project yang sudah setup autentikasi Laravel Breeze biasanya pakai Tailwind CSS secara default. Jadi cukup gunakan Paginator::useTailwind() dan pagination kamu langsung tampil cantik sesuai theme Breeze tanpa CSS tambahan!

5

Custom Pagination View (Opsional tapi Keren)

Ingin tampilan pagination yang fully custom? Publish view-nya dan edit sesuka hati:

terminal
# Publish semua pagination views
$ php artisan vendor:publish --tag=laravel-pagination

# View akan tersedia di:
# resources/views/vendor/pagination/

Lalu di Blade, panggil custom view spesifik: {{ $posts->links('vendor.pagination.custom') }}

4. Pagination Lanjutan: Filter, Search & URL Parameter

Di dunia nyata, pagination sering dikombinasikan dengan fitur search dan filter. Masalah umum: setelah filter data, pindah halaman malah kehilangan parameter filter. Solusinya adalah ->withQueryString()!

PostController.php — Pagination + Search
public function index(Request $request)
{
    $query = Post::latest();

    // Filter berdasarkan kata kunci search
    if ($request->filled('search')) {
        $query->where('title', 'like', '%' . $request->search . '%');
    }

    // Pagination + pertahankan query string (?search=...)
    $posts = $query->paginate(10)->withQueryString();

    return view('posts.index', compact('posts'));
}
⚠️
Perhatian

Selalu gunakan ->withQueryString() saat menggabungkan pagination dengan filter/search. Tanpa ini, saat user klik halaman 2, semua parameter filter akan hilang — pengalaman yang sangat frustasi!

Pagination di REST API (JSON)

Saat return dari controller API, cukup return response()->json($posts->paginate(10)) — Laravel otomatis membungkus data dengan metadata lengkap: current_page, total, last_page, next_page_url, dan lainnya. Siap dikonsumsi frontend manapun!

🎉

Kesimpulan: Pagination Itu Mudah, tapi Berdampak Besar!

Kita sudah belajar bahwa pagination bukan sekadar tombol "Selanjutnya" — ini adalah fondasi performa dan UX yang serius. Dengan hanya satu baris ->paginate(), Laravel mengurus semua query SQL-nya. Kamu juga sudah tahu cara menggabungkan pagination dengan search menggunakan ->withQueryString(), dan bagaimana semua ini relevan di project yang menggunakan autentikasi Laravel Breeze.

✅ Yang kamu pelajari hari ini:

  • Perbedaan paginate(), simplePaginate(), dan cursorPaginate()
  • Implementasi pagination di Controller dan Blade View
  • Menggabungkan pagination dengan fitur search/filter
  • Custom pagination view dengan artisan publish
  • Integrasi pagination di project dengan sistem autentikasi Breeze

💬 Punya pertanyaan atau pengalaman seru dengan pagination? Tinggalkan komentar di bawah! Kalau artikel ini membantu, share ke teman-teman yang lagi belajar Laravel. Dan jangan lupa subscribe supaya kamu tidak ketinggalan 23 artikel berikutnya di seri ini! 🚀

No comments:

Post a Comment

saifiahmada.com adalah blog belajar programming Indonesia, membahas lengkap materi bahasa pemrograman: code HTML, CSS, Bootstrap, Desain, PHP, MySQL, coding Java, Query, SQL, dan dunia linux