Объединение запроса AND/OR в Laravel Как я могу написать следующие или похожие запросы с помощью Eloquent? SELECT * FROM a_table WHERE (a LIKE %keyword% OR b LIKE %keyword%) AND c = 1 AND d = 5 Я не мог объединить AND/OR так, как я хотел, привязывая функции where и or_where. Ответ 1 Вы можете заключить, где клаузулы: 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 Ответ 2 Для более точного ответа на пример: $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 Ответ 3 В Laravel 5.1+ это также сделает работу и выглядит более чистым: Model::where(function($query) { $query->where('a', 'like', 'keyword'); $query->or_where('b', 'like', 'keyword'); })->where('c', '=', '1')->get(); Ответ 4 Вы можете использовать DB::raw() в первом where(), чтобы поместить в инструкцию like/.
Ответ 1 Вы можете заключить, где клаузулы: 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
Ответ 2 Для более точного ответа на пример: $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
Ответ 3 В Laravel 5.1+ это также сделает работу и выглядит более чистым: Model::where(function($query) { $query->where('a', 'like', 'keyword'); $query->or_where('b', 'like', 'keyword'); })->where('c', '=', '1')->get();