Laravel Eloquent 使用 WHERE 一组条件或 OR 另一组条件以及一些常见条件进行查询?

Laravel Eloquent Query Using WHERE a set of conditions or OR another set of conditions along with some common conditions?

我必须在我的 Laravel 项目中执行 sql 操作。

除了提到的条件外,我还有一些常见的条件。我知道如何用原始 mysql 编写它。

所以,比如说 我需要的是

如何使用 laravel 查询格式说 WHERE Condition X AND Condition Y AND ( (a = 1 and b =1 ) OR (c = 1 AND d = 1) )

考虑以下语法:

DB::table('yourTable')
    ->where('x', '=', '1')
    ->where('y', '=', '1')
    ->where(function($q1)
    {
        $q1->where(function($q2)
        {
            $q2->where('a', '=', '1')
            ->where('b', '=', '1');
        })
        ->orWhere(function($q2)
        {
            $q2->where('c', '=', '1')
            ->where('d', '=', '1');
        });
    });

如果您更喜欢更易读的语法 where 将接受数组作为参数

DB::table('yourTable')
            ->where('x','=',1)
            ->where('y','=',1)
            ->where(function($queryBuilder){
                $queryBuilder->where([
                    ['a','=',1],
                    ['b','=',1],
                ])
                ->orWhere([
                    ['c','=',1],
                    ['d','=',1],
                ]);
            });
$query = DB::table(...)
    ->where(function ($query) {
        $query->where('a', 1)->where('b', 1);
    })->orWhere(function ($query) {
        $query->where('c', 1)->where('d, 1);
    });

Laravel 6.x Docs - Query Builder - Where Clauses - Parameter Grouping

您需要使用闭包将它们单独分组。 orWhere() 用于外部查询,where() 用于内部查询。

$a = 1;
$b = 1;
$c = 1;
$d = 1;

Model::where(function($query) use ($a, $b) {
        $query->where("a", $a)
              ->where("b", $b);
    })
    ->orWhere(function($query) use ($c, $d) {
        $query->where("c", $c)
              ->where("d", $d);
    });

如果您没有模型,可以将Model::替换为DB::table("myTable")

您可以使用 toSql() 查看最终查询。