Membuat pagination sederhana di Laravel

berikut adalah langkah-langkah lebih detail untuk menambahkan pagination ke daftar produk Anda di Laravel:

Langkah 1: Install Paginator

buka file app/Providers/AppServiceProvider.php dan impor Paginator di dalamnya:

use Illuminate\Pagination\Paginator;

Kemudian, dalam metode boot(), tambahkan baris berikut untuk menggunakan Bootstrap sebagai tema pagination:

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use Illuminate\Pagination\Paginator;

class AppServiceProvider extends ServiceProvider
{
    /**
     * Register any application services.
     */
    public function register(): void
    {
        //
    }

    /**
     * Bootstrap any application services.
     */
    public function boot(): void
    {
        Paginator::useBootstrap();
    }
}

Langkah 2: Menggunakan Pagination di Controller

Di dalam ProductController, ubah metode index() untuk menggunakan metode paginate():

<?php

namespace App\Http\Controllers;

use App\Models\Product;

use Illuminate\Http\Request;

class ProductController extends Controller
{
    public function index()
    {
    $products = Product::paginate(5); // Menampilkan 10 produk per halaman
    return view('products.index', compact('products'));
    }

    public function create()
    {
        return view('products.create');
    }

    public function store(Request $request)
    {
        $request->validate([
            'name' => 'required|string|max:255',
            'price' => 'required|numeric',
            'stock' => 'required|integer',
        ]);

        Product::create($request->all());

        return redirect()->route('products.index')->with('success', 'Product created successfully');
    }

    public function show($id)
    {
        $product = Product::find($id); // Mengambil produk berdasarkan ID
        return view('products.show', compact('product'));
    }

    public function edit($id)
    {
        $product = Product::find($id); // Mengambil produk berdasarkan ID
        return view('products.edit', compact('product'));
    }

    public function update(Request $request, $id)
    {
        $request->validate([
            'name' => 'required|string|max:255',
            'price' => 'required|numeric',
            'stock' => 'required|integer',
        ]);

        $product = Product::find($id);
        $product->update($request->all());

        return redirect()->route('products.index')->with('success', 'Product updated successfully');
    }

    public function destroy($id)
    {
        $product = Product::find($id);
        
        $product->delete();

        return redirect()->route('products.index')->with('success', 'Product deleted successfully');
    }
        // Menampilkan daftar produk
        public function list_product()
        {
            $products = Product::all();
            return response()->json($products);
        }
    
        // Menampilkan detail produk berdasarkan ID
        public function detail_product($id)
        {
            $product = Product::find($id);
            if (!$product) {
                return response()->json(['message' => 'Produk tidak ditemukan'], 404);
            }
            return response()->json($product);
        }
    
        // Menyimpan produk baru
        public function create_product(Request $request)
        {
            $request->validate([
                'name' => 'required|string|max:255',
                'price' => 'required|numeric',
                'stock' => 'required|integer',
            ]);
    
            Product::create($request->all());
    
            return response()->json(['message' => 'Produk berhasil disimpan'], 201);
        }
    
        // Mengupdate produk berdasarkan ID
        public function update_product(Request $request, $id)
        {
            $product = Product::find($id);
            if (!$product) {
                return response()->json(['message' => 'Produk tidak ditemukan'], 404);
            }
            $request->validate([
                'name' => 'required|string|max:255',
                'price' => 'required|numeric',
                'stock' => 'required|integer',
            ]);

            $product->update($request->all());
    
            return response()->json(['message' => 'Produk berhasil diupdate'], 200);
        }
    
        // Menghapus produk berdasarkan ID
        public function delete_product($id)
        {
            $product = Product::find($id);
            if (!$product) {
                return response()->json(['message' => 'Produk tidak ditemukan'], 404);
            }
    
            $product->delete();
    
            return response()->json(['message' => 'Produk berhasil dihapus'], 200);
        }
}

Dalam contoh ini, paginate(10) akan menampilkan 10 produk per halaman. Sesuaikan angka 10 dengan jumlah produk yang ingin Anda tampilkan per halaman.

Langkah 3: Menggunakan Pagination di View

Di dalam file products.index.blade.php, tampilkan daftar produk dan tambahkan elemen pagination:

@extends('layouts.app')

@section('content')
    <h2>Daftar Produk</h2>
    <table class="table">
        <thead>
            <tr>
                <th>Nama</th>
                <th>Harga</th>
                <th>Stok</th>
                <th>Aksi</th>
            </tr>
        </thead>
        <tbody>
            @foreach ($products as $product)
                <tr>
                    <td>{{ $product->name }}</td>
                    <td>{{ $product->price }}</td>
                    <td>{{ $product->stock }}</td>
                    <td>
                        <a href="{{ route('products.show', $product->id) }}" class="btn btn-info">Detail</a>
                        <a href="{{ route('products.edit', $product->id) }}" class="btn btn-primary">Edit</a>
                        <form action="{{ route('products.destroy', $product->id) }}" method="POST" style="display:inline;">
                            @csrf
                            @method('DELETE')
                            <button type="submit" class="btn btn-danger" onclick="return confirm('Apakah Anda yakin ingin menghapus produk ini?')">Hapus</button>
                        </form>
                    </td>
                </tr>
            @endforeach
        </tbody>
    </table>

    <!-- Tampilkan navigasi pagination -->
    {{ $products->links() }}

    <a href="{{ route('products.create') }}" class="btn btn-success">Tambah Produk Baru</a>
@endsection

Pada bagian {{ $products->links() }}, Laravel secara otomatis akan membuat tombol navigasi untuk Anda, memungkinkan pengguna untuk beralih antara halaman-halaman berikutnya dan sebelumnya.

Di bab berikutnya akan belajar cara membuat auth dengan laravel bootstrap Scaffolding di project yang telah dibuat.

Last updated