首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Laravel:如何在where子句中混合' and‘和'or’条件?

Laravel:如何在where子句中混合' and‘和'or’条件?
EN

Stack Overflow用户
提问于 2020-07-29 01:21:41
回答 5查看 85关注 0票数 1

我搜索并找到了类似的帖子,但没有一个与我的情况相同。虽然我的案例在数据库查询的where子句中很常见,但Laravel文档似乎没有显示出像我这样的案例。

在我的例子中,where子句类似于下面,我不能让它与where()和orwhere()方法一起工作,以及人们在其他帖子中建议的技巧。感谢您提供的任何信息。谢谢。

代码语言:javascript
代码运行次数:0
运行
复制
where a = 1 and b = 2 and (c = 3 or c = 4) and (d = 5 or d = 6)

另一个复杂程度是,我可以将所有' and‘条件组合到一个单独的数组中,并将其提供给一个where()方法,但我必须将'or’条件分组到单独的数组中,以及在代码中动态收集了多少组,如下所示。

代码语言:javascript
代码运行次数:0
运行
复制
$and = [['a', '=', 1], ['b', '=', 2], ...];

if($cond1) $or['or1'] = [['c', '=', 3], ['c', '=', 4], ...];
if($cond2) $or['or2'] = [['d', '=', 5], ['d', '=', 6], ...];
if($cond3) $or['or3'] = [['e', '=', 7], ['e', '=', 8], ...];
...

PS:我想感谢所有回复(帖子或评论)的人。我认真考虑了所有的建议,并尝试了一些可以适用于我的案例,但不幸的是,这些建议都没有奏效。因此,我的解决方案就是编译一个原始的where子句,如我上面给出的示例所示,并使用whereRaw()方法。这很简单,而且运行得很好。

EN

回答 5

Stack Overflow用户

发布于 2020-07-29 01:30:09

你可以这样做

代码语言:javascript
代码运行次数:0
运行
复制
Model::where('a', '1')
    ->where('b', '2')
    ->where(function ($q) {
         $q->where('c', '3')->orWhere('c', '4');
    })
    ->where(function ($q) {
         $q->where('d', '5')->orWhere('d', '5');
    })->get();
票数 3
EN

Stack Overflow用户

发布于 2020-07-29 01:31:02

下面这样的代码应该能起到作用:

代码语言:javascript
代码运行次数:0
运行
复制
Model::where([
    ['a', '=', 1],
    ['b', '=', 2],
    [['c', '=', 3], 'OR', ['c', '=', 4]],
    [['d', '=', 5], 'OR', ['d', '=', 6]]
]);
票数 1
EN

Stack Overflow用户

发布于 2020-07-29 01:31:20

如果我明白你的问题,这张收据是给你的:

代码语言:javascript
代码运行次数:0
运行
复制
$result = DB::table('table')
   ->where('a', 1)
   ->where('b', 2)
   ->where(function($query) {
      $query->where('c', 3)
            ->orWhere('c', 4)
   })
   ->where(function($query) {
      $query->where('d', 5)
            ->orWhere('d', 6)
   ->get();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63139556

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档