20

如何使用 Eloquent 编写以下或类似类型的查询?

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

通过链接 where & or_where 函数,我无法以我想要的方式组合 AND/OR。

4

4 回答 4

50

您可以嵌套 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

于 2013-03-27T13:12:10.187 回答
9

有关示例的更准确答案:

$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 的语法,对 Laravel 4 使用 camelCase orWhere()

于 2014-02-11T16:56:00.160 回答
3

在 Laravel 5.1+ 中,这也可以完成工作并且看起来更干净:

Model::where(function($query) {
    $query->where('a', 'like', 'keyword');
    $query->or_where('b', 'like', 'keyword');
})->where('c', '=', '1')->get();
于 2015-12-21T19:45:42.827 回答
-3

您可以使用DB::raw()in firstwhere()来放入 like/or 语句。

于 2013-03-27T12:01:04.153 回答