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.