Cara menggunakan if di dalam where di laravel

Cara menggunakan if di dalam where di laravel

Di Laravel, Anda bisa menggunakan if di dalam where clause untuk membuat kondisi yang dinamis berdasarkan nilai variabel atau kondisi lainnya. Namun, perlu diingat bahwa penggunaan if secara langsung di dalam where clause tidak disarankan karena dapat membuat query menjadi kompleks dan sulit dibaca.

Berikut adalah beberapa cara yang lebih baik untuk mencapai kondisi dinamis di dalam query Laravel:

1. Menggunakan Closure

Anda dapat menggunakan closure di dalam where clause untuk membuat kondisi yang dinamis. Closure memungkinkan Anda untuk mengakses variabel dari luar scope dan membuat kondisi berdasarkan nilai variabel tersebut. 

use App\Models\User;

$active = true;

$users = User::where(function ($query) use ($active) {
    if ($active) {
        $query->where('active', true);
    }
})->get();

Dalam contoh ini, jika variabel $active bernilai true, maka query akan menambahkan kondisi WHERE active = 1. Jika $active bernilai false, maka kondisi tersebut tidak akan ditambahkan.

2. Menggunakan when

Method when adalah cara yang lebih elegan untuk membuat kondisi dinamis di dalam query. when menerima dua argumen: kondisi dan closure. Jika kondisi bernilai true, maka closure akan dieksekusi. 

use App\Models\User;

$active = true;

$users = User::query()
    ->when($active, function ($query) {
        $query->where('active', true);
    })
    ->get();

Contoh ini memiliki fungsi yang sama dengan contoh sebelumnya, tetapi menggunakan when untuk membuat kondisi yang lebih mudah dibaca.

3. Menggunakan Operator Ternary

Anda juga dapat menggunakan operator ternary untuk membuat kondisi sederhana di dalam where clause. 

use App\Models\User;

$role = 'admin';

$users = User::where('role', $role === 'admin' ? 'admin' : 'user')->get();

Dalam contoh ini, jika variabel $role bernilai admin, maka query akan mencari user dengan role admin. Jika tidak, maka query akan mencari user dengan role user.

Tips

  • Gunakan nama variabel yang deskriptif untuk memudahkan pembacaan kode.
  • Jika kondisi yang Anda buat kompleks, sebaiknya gunakan closure atau when agar kode tetap terstruktur.
  • Hindari penggunaan if secara langsung di dalam where clause karena dapat membuat query menjadi sulit dibaca dan dipelihara.

Dengan menggunakan cara-cara di atas, Anda dapat membuat kondisi dinamis di dalam query Laravel dengan lebih mudah dan efisien.