Как написать следующие или похожие запросы с помощью 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.