Contoh Simple 'Advance Where' Query Builder di Laravel


Tips laravel kali ini saya akan memberi contoh kode sederhana untuk Searching database pakai Query Builder di laravel.
Misal kita ingin melakukan Search pada sebuah table sebut saja tabel 'artikel'  . mungkin ada sebelumnya ada yang meng-Kode seperti ini
//MyModel.php

public static function getSearch($search=null){
    
    //is_publish : 0 = pending, 1 = published

    $result = DB::table('article')
        ->where('article.is_publish','1')
        ->where('article.title','LIKE','%'.$search.'%')
        ->orWhere('article.content', 'LIKE','%'.$search.'%')
        ->select('*')
        ->orderBy('article.id', 'desc')->paginate(10);

    return $result;
}
Scenario Query diatas adalah mencari Artikel DIMANA artikel itu sudah di Publish (is_publish =1 ) DAN judul artikel seperti '%...%' ATAU konten artikel seperti '%...%' .
SELECT * FROM `article` WHERE `article`.`is_publish` = '1' AND `article`.`title` LIKE '%search%' OR `article`.`content` LIKE '%search%'...
Query diatas tidak error tapi akan memunculkan hasil yang salah dimana Artikel yang is_publish = 0 juga ikut muncul. Untuk membuatnya benar, kita harus membuat kode seperti berikut
public static function getSearch($search=null){
    
    //is_publish : 0 = pending, 1 = published

    $result = DB::table('article')
        ->where('article.is_publish','1')
        ->where(function($query) use ($search){

            $query->where('article.title','LIKE','%'.$search.'%')
                  ->orWhere('article.content', 'LIKE','%'.$search.'%');
        })
        ->select('*')
        ->orderBy('article.id', 'desc')->paginate(10);

    return $result;
}
Kode diatas akan menghasilkan Raw query berikut
SELECT * FROM `article` WHERE `article`.`is_publish` = '1' AND (`article`.`title` LIKE '%search%' OR `article`.`content` LIKE '%search%')...

Perhatikan bahwa kita harus menggunakan Closure
....
->where(function($query) use ($search){

    $query->where('article.title','LIKE','%'.$search.'%')
           ->orWhere('article.content', 'LIKE','%'.$search.'%');
 })
sebab kita mengakses variable diluar fungsi.

Share this

Related Posts

Latest
Previous
Next Post »