Our blog

When() pada eloquent di Laravel sebagai pengganti if-elses untuk query kondisi

 

Latest Blog's

When() pada eloquent di Laravel sebagai pengganti if-elses untuk query kondisi

Laravel     3 weeks ago


Pada umumnya kita menggunakan if-else untuk menyelesaikan permasalahan kondisi pada project Laravel kita. Lalu pernahkan kalian menggunakan when()?

Kebanyakan dari kita menggunakan querie “if-else”, seperti ini:

if (request('filter_by') == 'likes') {
    $query->where('likes', '>', request('likes_amount', 0));
}
if (request('filter_by') == 'date') {
    $query->orderBy('created_at', request('ordering_rule', 'desc'));
}

What if I told you there’s a (much) better way? Easily readable and more Laravel-ish. Meet when() method.

$query = Author::query();
 
$query->when(request('filter_by') == 'likes', function ($q) {
    return $q->where('likes', '>', request('likes_amount', 0));
});
$query->when(request('filter_by') == 'date', function ($q) {
    return $q->orderBy('created_at', request('ordering_rule', 'desc'));
});
 
$authors = $query->get();

Lebih cakep?

Baik, kita contohkan lagi ya. Disini kita coba membuat sebuah filter hanya user yang punya hak akses yang bisa mengakses dan mendapatkan respon.

Ini berarti jika tidak memiliki parameter atau parameter bernilai "false/null" kita data akan tampil semua, tetapi jika param memiliki nilai, misal "1" untuk administrator, maka data yang tampil hanya data administrator.

$query = User::query();
 
// From Laravel 5.4 you can pass the same condition value as a parameter
$query->when(request('role', false), function ($q, $role) { 
    return $q->where('role_id', $role);
});
 
$authors = $query->get();

Bukan hanya lebih cantik daripada if-else tetapi juga luar biasa untuk mengatur kondisional query kalian.

Informasi lebih lanjut terkait conditional queries: https://laravel.com/docs/5.5/queries#conditional-clauses