Membuat Query Filter dengan Pipeline Pattern pada Laravel

Andruw
5 min readFeb 28, 2022

--

Implementasi pipeline pattern untuk query filter pada laravel

Photo by Quinten de Graaf on Unsplash

Halo semuanya, apa kabar? Semoga semua dalam keadaan baik ya. Kali ini kita akan membahas mengenai cara membuat query filter dengan menerapkan Pipeline Pattern pada Laravel.

Query filter sebenarnya adalah penyebutan lain dari query scope, hanya saja dibuat terpisah dari model dengan harapan akan membuat isi file model lebih bersih. Pipeline pattern adalah sebuah konsep dimana request data yang diterima akan diproses layaknya melalui pipa (pipe).

Gambaran Filtering dengan Pipeline

Dalam operasi CRUD, query filter ini bisa digunakan dalam Read atau jika dalam Laravel digunakan pada method Index pada Controller.

Project Study

Kita akan melakukan implementasi pada project untuk menampilkan daftar produk melalui REST API. Kita menggunakan Laravel versi 8.75 dan akan membagi tahapannya menjadi 3 bagian besar.

A. Persiapan

  1. Membuat Migration
  2. Membuat Model
  3. Membuat Factory
  4. Membuat Seeder
  5. Membuat API Resource
  6. Membuat Controller Product
  7. Membuat route untuk API

B. Membuat Query Filter

  1. Abstract Filter
  2. Sort Filter
  3. Search Filter
  4. MinPrice Filter
  5. MaxPrice Filter

C. Menggunakan Query Filter

  1. Membuat method untuk memanggil Query Filter pada model
  2. Memanggil method Query Filter dari model pada controller

Untuk struktur file dan direktori akan seperti ini :

Struktur Direktori

A. Persiapan

Tahap persiapan dilakukan untuk membuat struktur dasar dari project yang kita buat, mulai dari membuat migration sampai dengan API route.

  1. Membuat Migration

Untuk melakukannya kita bisa menggunakan perintah artisan berikut :

php artisan make:migration create_products_table

Kemudian kita perlu mengubah isinya menjadi seperti berikut :

Setelah membuat migration nya kita bisa melakukan pembuatan table dengan menggunakan perintah :

php artisan migrate

2. Membuat Model

Langkah selanjutnya adalah membuat model. Kita bisa melakukannya dengan menggunakan perintah artisan berikut :

php artisan make:model Product

3. Membuat Factory

Setelah membuat model kita akan membuat factory yang akan digunakan untuk membuat data dummy yang kita gunakan dalam seeder.

Untuk membuat factory bisa menggunakan perintah artisan berikut :

php artisan make:factory ProductFactory

Kemudian ubah isinya menjadi seperti berikut :

4. Membuat Seeder

Berikutnya kita perlu membuat seeder dengan perintah artisan berikut :

php artisan make:seeder ProductSeeder

Lalu ubah isinya menjadi seperti berikut :

Setelah membuat factory dan seeder kita bisa melakukan seeding dengan menggunakan perintah :

php artisan db:seed --class=ProductSeeder

5. Membuat API Resource

Kemudian kita akan membuat Resource atau API Resource dengan menggunakan perintah artisan :

php artisan make:resource Api/ProductResource

Kemudian ubah isinya menjadi seperti berikut :

6. Membuat Controller Product

Setelah itu kita akan membuat controller Product dengan perintah artisan :

php artisan make:controller Api/ProductController

7. Membuat route untuk API

Terakhir, kita perlu membuat route API. Caranya dengan menambahkan route product pada routes/api.php sehingga akan menjadi seperti berikut :

B. Membuat Query Filter

Kita akan membuat 1 class sebagai abstract class dan 4 class untuk query filter. Karena secara bawaan pembuatan query filter ini tidak bisa dibuat melalui command artisan, maka kita perlu membuatnya secara manual. Kita perlu membuat direktori QueryFilters di dalam direktori app kita. lalu di dalamnya kita akan membuat abstract class dan juga direktori Product.

  1. Abstract Filter

Kita akan membuat abstract class yang ada dalam direktori QueryFilters dengan isi file sebagai berikut :

Abstract Class ini akan memuat method yang akan diturunkan kepada class filter yang lain.

2. Sorting Filter

Selanjutnya kita akan membuat filter untuk melakukan sorting, yang ada dalam direktori QueryFilters/Product dengan isi file sebagai berikut :

Sorting sebenarnya bukan bagian dari filter, tapi biasa dipakai juga dalam request untuk mendapatkan list data. Filter Sorting ini untuk mengurutkan data berdasar suatu kolom pada table. Untuk nama kolomnya sendiri diambil dari value pada query parameter sort_by, jika disertakan. Jika tidak disertakan params sort_by maka data diurutkan berdasarkan id.

3. Search Filter

Kemudian kita akan membuat filter untuk melakukan search, yang ada dalam direktori QueryFilters/Product dengan isi file sebagai berikut :

Filter Searching ini untuk menyaring data berdasarkan kolom name pada tabel.

4. MinPrice Filter

Selanjutnya kita akan membuat filter untuk melakukan penyaringan berdasar harga terendah, yang ada dalam direktori QueryFilters/Product. Untuk nama filter yang terdiri dari lebih dari 1 kata, maka dituliskan dalam format PascalCase. Isi dari file sebagai berikut :

Filter MinPrice ini untuk menyaring data yang memiliki harga minimal seperti yang ditentukan.

5. MaxPrice Filter

Terakhir, kita akan membuat filter untuk melakukan penyaringan berdasar harga tertinggi, yang ada dalam direktori QueryFilters/Product. Karena nama filter-nya dari lebih dari 1 kata, maka dituliskan dalam format PascalCase. isi Isi dari file sebagai berikut :

Filter MaxPrice ini untuk menyaring data yang memiliki harga minimal seperti yang ditentukan.

C. Menggunakan Query Filter

Setelah selesai membuat query filter, maka kita tinggal menggunakannya dengan membuat method pada model dan memanggil method tersebut dari controller.

  1. Membuat method untuk memanggil Query Filter pada model

Kta akan untuk menggunakan pipeline untuk “mengirim” request data melalui query filter yang telah dibuat. Kita akan menambahkan property $filters dan method getAll seperti berikut :

2. Memanggil method Query Filter dari model pada controller

Selanjutnya kita perlu memanggil method dari model tadi dari controller. Untuk itu kita perlu mengubah pada method index menjadi seperti berikut :

Pengujian

Setelah selesai kita bisa melakukan pengujian dengan menggunakan browser atau REST API client. Untuk mengaktifkan filter ini kita perlu menyertakan filternya sebagai query parameter.

Untuk menggunakan filter kita perlu menyertakan nama filter dalam format snake_case. Berikut adalah hasil pengujian yang dilakukan menggunakan Postman :

Pengujian Filter dengan Postman

Penutup

Pada kesempatan kali ini kita telah belajar membuat Query Filter untuk operasi Read (Index) dengan mengimplementasikan Pipeline Pattern. Dengan demikian diharapkan akan lebih mudah untuk memahami alur pemrosesan dari request pada bagian filtering dan akan membuat model menjadi lebih bersih. Semoga tulisan kali ini bermanfaat. Sampai jumpa di tulisan selanjutnya. Salam.

--

--

Andruw
Andruw

Written by Andruw

PHP/Laravel Developer | Web Tech Enthusiast

Responses (1)