【问题标题】:Laravel Eloquent Query Using WHERE a set of conditions or OR another set of conditions along with some common conditions?Laravel Eloquent Query 使用 WHERE 一组条件或 OR 另一组条件以及一些常见条件?
【发布时间】:2020-03-14 14:52:55
【问题描述】:

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

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

所以,例如 我需要的是

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

【问题讨论】:

  • 您可以使用此文档来了解有关如何在 Laravel 中构建查询的更多信息。 laravel.com/docs/6.x/queries#where-clauses
  • where方法可以接受一个匿名函数,并在其中进行相应的分组

标签: php mysql laravel eloquent laravel-query-builder


【解决方案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],
                ]);
            });

【讨论】:

  • 我有一个条件 E 和条件 F 都适用于所有情况。怎么实现呢?
  • 请编辑您的问题并向我们展示真正的问题。
【解决方案2】:

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

【讨论】:

    【解决方案3】:
    $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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-12
      • 1970-01-01
      • 2020-08-15
      • 1970-01-01
      • 2016-12-29
      • 2021-01-21
      • 2018-05-24
      • 2019-03-15
      相关资源
      最近更新 更多