Langsung ke konten utama

Tips Jago Membuat Fitur Filtering Data Kompleks dengan Laravel

Pendahuluan

Bayangin lagi ngerjain fitur sederhana, tapi tiba-tiba klien minta filter data yang kondisinya ribet banget: harus bisa filter berdasarkan range tanggal, kategori, status, sampai pencarian teks yang dinamis. Awalnya mungkin kita bakal nulis tumpukan if-else yang bikin Controller jadi 'gemuk' dan sulit dibaca. Saya sering lihat pola ini di project yang mulai berkembang, di mana kode jadi susah di-maintain karena logika filternya nyampur sama logika request.

Tips & Best Practices

Di banyak project, biasanya saya mulai dari memisahkan logika filtering ke dalam scope model supaya Controller tetap bersih. Pertama, gunakan Query Scopes biar logika filter bisa dipakai ulang. Kedua, selalu manfaatkan when() agar kita nggak perlu capek-capek ngecek apakah input itu ada atau kosong. Ketiga, saya selalu membiasakan diri untuk memvalidasi input di form request sebelum menyentuh query builder, supaya nggak ada query sampah yang masuk ke database.

Contoh Kode

Berikut cara saya membungkus logika filter agar enak dilihat dan rapi:

public function scopeFilter($query, array $filters) { return $query->when($filters['search'] ?? null, function ($query, $search) { $query->where('title', 'like', '%' . $search . '%'); })->when($filters['category_id'] ?? null, function ($query, $id) { $query->where('category_id', $id); }); }

Variasi Implementasi

Kalau filternya makin liar, kadang saya beralih ke Pipeline Pattern. Ini cocok kalau filternya ada banyak banget dan tiap filter punya logika unik. Tapi, kalau cuma filter standar, Query Builder dengan when() sudah jauh lebih dari cukup dan nggak bikin overhead. Jangan buru-buru pake package pihak ketiga kalau fitur native Laravel udah bisa cover dengan rapi.

Kesalahan Umum

Pertama, seringkali kita lupa nge-sanitize input, akhirnya malah kena SQL Injection. Kedua, menulis logika query langsung di Controller yang bikin unit testing jadi mimpi buruk. Ketiga, membiarkan query tanpa index di database pas filternya dipake di tabel jutaan baris. Keempat, lupa pakai when() dan malah nulis if($request->has) berulang kali yang bikin kode kelihatan 'kotor'. Terakhir, mengabaikan performa dengan memuat semua data sekaligus (lupa pakai paginate()) saat fitur filter dijalankan.

Ringkasan

Bikin fitur filter itu seni menyeimbangkan antara keterbacaan kode dan performa query. Kuncinya bukan cuma soal sintaks, tapi gimana kita bisa bikin kode yang pas kita buka lagi enam bulan ke depan, kita nggak bakal ngedumel sendiri. Tetaplah jaga Controller tetap tipis, dan biarkan Model atau Pipeline yang bekerja keras di balik layar.

Komentar

Postingan populer dari blog ini

Fungsi lain tombol penerima panggilan di headset

Kegunaan tombol yang berada di headset utamanya adalah untuk menerima panggilan dan pause panggilan. Dan headset itu sendiri, kadang juga digunakan untuk mendengarkan music, digunakan bersama saat main game, supaya suara yang dikeluarkan oleh gadget tidak terlalu keras sehingga mengurangi beban gadget. Dengan mengurangi beban gadget, ada beberapa yang beranggapan kalau itu akan menghemat batere.

Cara Reset Password Database MySQL Menggunakan Laragon

Cara Reset Password Database MySQL Menggunakan Laragon Laragon adalah salah satu lingkungan pengembangan lokal (local development environment) yang populer di antara para pengembang web. Dalam beberapa kasus, mungkin kita perlu mereset password database MySQL pada Laragon jika lupa password atau untuk alasan keamanan tertentu. Berikut adalah langkah-langkah yang dapat kita ikuti untuk melakukan reset password database MySQL menggunakan Laragon:

Apa Itu R dan L di Headset? Ini Dia Perbedaan dan Fungsinya yang Perlu Anda Ketahui

Arti R dan L di Headset: Apa Perbedaannya? Headset adalah alat yang digunakan untuk mendengarkan suara dari sumber audio seperti ponsel, komputer, atau pemutar musik. Headset biasanya terdiri dari dua bagian, yaitu earphone yang dimasukkan ke dalam telinga dan mikrofon yang digunakan untuk berbicara. Pada earphone, kita sering melihat ada tulisan R dan L. Apa arti dan perbedaan dari kedua huruf tersebut?