Contoh Simple 'Advance Where' Query Builder di Laravel

By Budyks    PHP

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. 

Comments



    Follow Us