DEV Community

Dhiecoderweb
Dhiecoderweb

Posted on • Originally published at dhiecoderweb.com

Cara Membuat Fitur Filter Data di Laravel

Fitur filter dan pencarian data adalah kebutuhan yang sangat umum dalam aplikasi web — dari filter produk di e-commerce hingga pencarian laporan di sistem manajemen. Di Laravel, ada beberapa cara untuk mengimplementasikannya, mulai dari yang paling sederhana hingga yang paling terstruktur. Artikel ini akan mengajarkan kamu pola filter data yang bersih, mudah diperluas, dan tidak mengotori controller.

Pendekatan Sederhana: Filter Langsung di Controller

Cara paling dasar adalah menggunakan kondisional di query builder. Cocok untuk filter yang tidak terlalu banyak:

<?php

namespace App\Http\Controllers;

use App\Models\Product;
use Illuminate\Http\Request;

class ProductController extends Controller
{
    public function index(Request $request)
    {
        $query = Product::query();

        // Filter berdasarkan nama (pencarian)
        if ($request->filled('search')) {
            $query->where('name', 'like', '%' . $request->search . '%');
        }

        // Filter berdasarkan kategori
        if ($request->filled('category_id')) {
            $query->where('category_id', $request->category_id);
        }

        // Filter range harga
        if ($request->filled('min_price')) {
            $query->where('price', '>=', $request->min_price);
        }
        if ($request->filled('max_price')) {
            $query->where('price', '<=', $request->max_price);
        }

        // Sorting
        $sortBy  = $request->get('sort_by', 'created_at');
        $sortDir = $request->get('sort_dir', 'desc');
        $allowedSorts = ['name', 'price', 'created_at'];

        if (in_array($sortBy, $allowedSorts)) {
            $query->orderBy($sortBy, $sortDir === 'asc' ? 'asc' : 'desc');
        }

        $products = $query->paginate(15)->withQueryString();

        return view('products.index', compact('products'));
    }
}
Enter fullscreen mode Exit fullscreen mode

Membuat Form Filter di Blade

<form method="GET" action="{{ route('products.index') }}">
    <input type="text" name="search" value="{{ request('search') }}" placeholder="Cari produk...">

    <select name="category_id">
        <option value="">Semua Kategori</option>
        @foreach($categories as $cat)
            <option value="{{ $cat->id }}" {{ request('category_id') == $cat->id ? 'selected' : '' }}>
                {{ $cat->name }}
            </option>
        @endforeach
    </select>

    <input type="number" name="min_price" value="{{ request('min_price') }}" placeholder="Harga min">
    <input type="number" name="max_price" value="{{ request('max_price') }}" placeholder="Harga maks">

    <button type="submit">Filter</button>
    <a href="{{ route('products.index') }}">Reset</a>
</form>
Enter fullscreen mode Exit fullscreen mode

Gunakan withQueryString() pada paginator agar parameter filter tetap ada saat berpindah halaman.


Artikel ini ditampilkan sebagian. Untuk pembahasan selengkapnya, beserta contoh dan langkah detailnya, Anda dapat membacanya pada sumber aslinya:

Cara Membuat Fitur Filter Data di Laravel

Tutorial pemrograman dan tools developer lainnya juga tersedia di dhiecoderweb.com.

Top comments (0)