【发布时间】:2013-03-27 06:46:57
【问题描述】:
如何使用 Eloquent 编写以下或类似类型的查询?
SELECT * FROM a_table WHERE (a LIKE %keyword% OR b LIKE %keyword%) AND c = 1 AND d = 5
我无法通过链接 where 和 or_where 函数以我想要的方式组合 AND/OR。
【问题讨论】:
如何使用 Eloquent 编写以下或类似类型的查询?
SELECT * FROM a_table WHERE (a LIKE %keyword% OR b LIKE %keyword%) AND c = 1 AND d = 5
我无法通过链接 where 和 or_where 函数以我想要的方式组合 AND/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
【讨论】:
function($query) use ($variable)
or_where 应该是orWhere 6+
对于示例的更准确答案:
$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()
【讨论】:
$val,如示例A_Table_Model::where(function($query) use ($val)
在 Laravel 5.1+ 中,这也可以完成工作并且看起来更干净:
Model::where(function($query) {
$query->where('a', 'like', 'keyword');
$query->or_where('b', 'like', 'keyword');
})->where('c', '=', '1')->get();
【讨论】:
您可以在第一个where() 中使用DB::raw() 来放入like/or 语句。
【讨论】: