Php Laravel雄辩的查询使用一组条件或另一组条件以及一些常见条件?

Php Laravel雄辩的查询使用一组条件或另一组条件以及一些常见条件?,php,mysql,laravel,eloquent,laravel-query-builder,Php,Mysql,Laravel,Eloquent,Laravel Query Builder,我必须在我的Laravel项目中执行sql操作 除了上述条件外,我还有一些共同条件。我知道如何用原始mysql编写它 比如说 我需要的是 我如何使用laravel查询格式来表示条件X和条件Y以及((a=1和b=1)或(c=1和d=1)) DB::table('yourTable') ->where('x', '=', '1') ->where('y', '=', '1') ->where(function($q1) { $q1-&

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

除了上述条件外,我还有一些共同条件。我知道如何用原始mysql编写它

比如说 我需要的是


我如何使用laravel查询格式来表示条件X和条件Y以及((a=1和b=1)或(c=1和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');
        });
    });
如果您更喜欢可读性更强的语法,
其中
将接受数组作为参数

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

您需要使用闭包将它们单独分组
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()
查看最终查询

您可以使用本文档了解有关如何在Laravel中构建查询的更多信息。where方法可以接受一个匿名函数,并在其中根据条件E和条件F对其进行分组,这两个条件在所有情况下都是通用的。如何实现它呢?请编辑您的问题并向我们展示真正的问题。
$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);
    });