在Laravel中组合AND/OR eloquent查询

SUB*_*0DH 16 php laravel

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

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

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

Flo*_*jol 40

您可以在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');
Run Code Online (Sandbox Code Playgroud)

这应该产生: SELECT * FROM models WHERE (a LIKE %keyword% OR b LIKE %keyword%) AND c = 1

  • @ SUB0DH您可以使用**use**将变量注入闭包范围.`function($ query)use($ variable)` (4认同)

aow*_*ie1 8

要获得更准确的示例答案:

$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();
Run Code Online (Sandbox Code Playgroud)

注意:这是Laravel 3语法,对Laravel 4使用camelCase或Where()