在 Laravel 中结合 AND/OR 雄辩的查询

2022-08-30 20:19:31

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

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

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


答案 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 语法,对于 Laravel 4 使用 camelCase 或Where()


推荐