A. Latar Belakang
Fitur pencarian dan filter adalah salah satu elemen terpenting dalam aplikasi e-commerce. Menurut penelitian dari Baymard Institute, 43% pengguna langsung menuju search bar saat membuka sebuah situs e-commerce, dan pengguna yang menggunakan fitur search memiliki kemungkinan 2-4 kali lebih tinggi untuk melakukan pembelian dibandingkan yang hanya browsing.
Tantangan teknis dalam membangun fitur pencarian dan filter yang handal terletak pada bagaimana mengintegrasikan relasi antar tabel dalam sebuah query yang efisien. Misalnya, mencari produk berdasarkan nama kategori, tag tertentu, atau rentang harga—semua ini membutuhkan pemahaman mendalam tentang cara kerja JOIN dan subquery dalam konteks Eloquent ORM.
Laravel menyediakan berbagai method query builder yang powerful seperti whereHas(), join(), dan Query Scope untuk membangun fitur pencarian dan filter yang kompleks namun tetap readable dan maintainable.
B. Pengertian Fitur Pencarian dan Filter Berbasis Relasi
Pencarian dan filter berbasis relasi adalah kemampuan untuk memfilter atau mencari record berdasarkan kondisi yang berasal dari tabel-tabel yang berelasi. Misalnya, mencari semua produk yang berasal dari kategori "Elektronik", memiliki tag "Promo", dengan harga antara Rp100.000–Rp500.000, dan stok lebih dari 0.
• Filter by Kategori — relasi
belongsTo• Filter by Tag — relasi Many-to-Many
• Filter by Rentang Harga —
whereBetween• Filter by Ketersediaan Stok — kondisi kolom
• Pencarian Teks — LIKE / Full-text search
• Sorting multi-kolom —
orderBy dinamis
C. Konsep dan Pembahasan
1. whereHas() untuk Filter Berdasarkan Relasi
Method whereHas() memungkinkan kita untuk memfilter model berdasarkan kondisi pada relasinya. Ini menghasilkan subquery EXISTS yang efisien dalam SQL, tanpa perlu melakukan JOIN secara manual.
2. Query Scope untuk Reusability
Laravel Query Scope memungkinkan kita untuk mendefinisikan filter yang dapat digunakan kembali (reusable) di berbagai tempat dalam aplikasi. Ada dua jenis: Local Scope (di model tertentu) dan Global Scope (berlaku di semua query model).
3. Filter Pipeline Pattern
Pola ini memungkinkan kita untuk membangun chain filter yang dinamis berdasarkan input pengguna, di mana setiap filter hanya diterapkan jika parameter yang sesuai diberikan. Membuat kode lebih modular dan mudah di-test.
D. Alat dan Bahan
E. Praktik Implementasi
1. Query Scope pada Model Product
2. Filter Pipeline Class
3. Controller
4. Contoh URL Filter
5. Menggunakan spatie/laravel-query-builder
Gunakan custom Filter Pipeline jika filter Anda memiliki logika bisnis yang kompleks dan spesifik.
Gunakan spatie/laravel-query-builder jika Anda membutuhkan API filter yang konsisten dan standar, terutama untuk REST API.
F. Kesimpulan
Membangun fitur pencarian dan filter yang terintegrasi dengan relasi
database membutuhkan pemahaman mendalam tentang query builder Laravel
dan pola desain yang tepat. Dengan menggunakan Query Scope, Filter Pipeline Pattern, dan method whereHas(), developer dapat membangun sistem filter yang powerful, reusable, dan mudah di-extend.
Integrasi dengan package seperti spatie/laravel-query-builder
dapat mempercepat development dan memberikan API filter yang konsisten,
terutama untuk proyek yang mengembangkan REST API publik.
G. Daftar Pustaka
- Laravel Documentation. (2024). Query Builder dan Eloquent Scopes. https://laravel.com/docs/10.x/queries
- Spatie. (2024). Laravel Query Builder Package. https://spatie.be/docs/laravel-query-builder
- Baymard Institute. (2023). E-Commerce Site Search Usability Study. Baymard.com.
- Otwell, T. (2023). Laravel: Up & Running. O'Reilly Media.
- Martin, R. C. (2017). Clean Architecture: A Craftsman's Guide to Software Structure. Prentice Hall.
