[Laravel] 使用orwhere的坑:SQL缺少了括號
如果直接使用
$query = DB::table('users')
->where('name' , 'like' , '%'.$search.'%')
->orWhere('email' , 'like' , '%'.$search.'%')
->where('status', 0)
->get();
得到的 SQL 為
SELECT * FROM users WHERE name like '%關鍵字%' or email like '%關鍵字%' and status = 0
如果你希望的結果是
SELECT * FROM users WHERE (name like '%關鍵字%' or email like '%關鍵字%') and status = 0
laravel 語法要改寫成
$query = DB::table('users')
->where(function($query) use($search) {
$query->where('name' , 'like' , '%'.$search.'%')
->orWhere('email' , 'like' , '%'.$search.'%');
})
->where('status', 0)
->get();
Source
☞ Laravel使用orwhere括號位置☞ Laravel 5.0 Query Builder - Where with multiple parameters

沒有留言: