Pagination adalah metode memotong data menjadi potongan kecil agar browser dan server tidak mengalami timeout atau down. Misalnya ketika kita memiliki 500 data, jika ditampilkan sekaligus halaman pada browser bisa menjadi sangat berat dan tidak user-friendly akibat load yang terlalu lama. Dengan pagination, data dapat dibagi per halaman, misal 5-10 item per page, user juga bisa klik 'next' atau nomor halaman untuk melihat data selanjutnya. Untungnya, Laravel sudah menyediakan fitur pagination bawaan sehingga developer tidak perlu membuat manual.
composer create-project laravel/laravel paginationproject
php artisan make:model Post -m
Schema::create('posts', function (Blueprint $table) {
$table->id();
$table->string('title');
$table->text('content');
$table->timestamps();
});
php artisan migrate
php artisan make:seeder PostSeeder
use App\Models\Post;
use Illuminate\Database\Seeder;
use Illuminate\Support\Str;
class PostSeeder extends Seeder {
public function run(): void {
for ($i = 1; $i <= 50; $i++) {
Post::create([
'title' => 'Post ke-' . $i,
'content' => Str::random(100),
]);
}
}
}
php artisan db:seed --class=PostSeeder
php artisan make:controller PostController
use App\Models\Post;
class PostController extends Controller {
public function index() {
$posts = Post::paginate(5);
return view('posts.index', compact('posts'));
}
}
use App\Http\Controllers\PostController;
Route::get('/posts', [PostController::class, 'index']);
<!DOCTYPE html><html>
<head>
<title>Pagination Laravel</title>
@vite('resources/css/app.css')
</head>
<body class="p-6">
<h1 class="text-xl font-bold mb-4">Daftar Post</h1>
<ul>
@foreach ($posts as $post)
<li class="mb-2 border-b pb-2">
<strong>{{ $post->title }}</strong>
<p>{{ $post->content }}</p>
</li>
@endforeach
</ul> <div class="mt-4">
{{ $posts->links() }}
</div>
</body>
</html>
php artisan serve
npm install
npm run dev