Объединение запроса AND / OR в Laravel

Как написать следующие или похожие запросы с помощью Eloquent?

SELECT * FROM a_table WHERE (a LIKE %keyword% OR b LIKE %keyword%) AND c = 1 AND d = 5

Я не мог объединить AND / OR так, как мне хотелось, цепочки, где функции & or_where функционируют.

Вы можете вставлять предложения: http://laravel.com/docs/database/fluent#nested-where

 Model::where(function($query) { $query->where('a', 'like', 'keyword'); $query->or_where('b', 'like', 'keyword'); }) ->where('c', '=', '1'); 

Это должно произвести: SELECT * FROM models WHERE (a LIKE %keyword% OR b LIKE %keyword%) AND c = 1

Для более точного ответа на пример:

 $val = '%keyword%'; A_Table_Model::where(function($query) use ($val) { $query->where('a', 'like', $val); $query->or_where('b', 'like', $val); }) ->where('c', '=', 1) ->where('d', '=', 5) ->get(); 

Примечание. Это синтаксис Laravel 3, используйте camelCase или Where () для Laravel 4

В Laravel 5.1+ это также будет работать и выглядит более чистым:

 Model::where(function($query) { $query->where('a', 'like', 'keyword'); $query->or_where('b', 'like', 'keyword'); })->where('c', '=', '1')->get(); 

Вы можете использовать DB::raw() в первом месте, where() помещается в оператор like / or.