Contoh Simple 'Advance Where' Query Builder di Laravel
|Shares :

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. 


Tags : #php #laravel


SHARES :


Budy K's Avatar

Sains & Teknologi Enthusiast, Software Developer. Check my profile!
> 75% komen akan dibalas. Mohon sabar ya. Simpan halaman ini dan cek kembali lagi

Comments

* Email will not be published


    Privacy .ToS .Contact Us
    © 2017 Teknosains