为了账号安全,请及时绑定邮箱和手机立即绑定

Laravel:如何在 where 子句中混合“and”和“or”条件?

Laravel:如何在 where 子句中混合“and”和“or”条件?

PHP
米脂 2023-09-08 10:15:13
我搜索并发现了类似的帖子,但没有一个与我的情况相同。似乎 Laravel 文档没有显示像我这样的情况,尽管我的情况在数据库查询的 where 子句中很常见。我的例子中的 where 子句如下所示,我无法让它与 where() 和 orwhere() 方法以及人们在其他帖子中建议的技巧一起使用。任何信息表示赞赏。谢谢。where a = 1 and b = 2 and (c = 3 or c = 4) and (d = 5 or d = 6)另一层复杂性是,我可以将所有“and”条件合并到一个数组中,并将其输入一个 where() 方法,但我必须将“or”条件分组到单独的数组中,以及在代码中动态收集多少组,比如下面的。$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() 方法。这样做很简单,而且效果很好。
查看完整描述

4 回答

?
红颜莎娜

TA贡献1842条经验 获得超12个赞

你可以这样做


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();


查看完整回答
反对 回复 2023-09-08
?
侃侃无极

TA贡献2051条经验 获得超10个赞

如果我收到您的问题,那么这张收据适合您:


$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();


查看完整回答
反对 回复 2023-09-08
?
侃侃尔雅

TA贡献1801条经验 获得超16个赞

像这样的事情应该可以解决问题:


Model::where([

    ['a', '=', 1],

    ['b', '=', 2],

    [['c', '=', 3], 'OR', ['c', '=', 4]],

    [['d', '=', 5], 'OR', ['d', '=', 6]]

]);


查看完整回答
反对 回复 2023-09-08
?
杨魅力

TA贡献1811条经验 获得超6个赞

既然你已经改进了你的问题。以下是实现这一目标的方法。


没有测试过。像这样的事情怎么样?


$ands = [['a', '=', 1], ['b', '=', 2], ...];


$query = Model::query();

foreach($and as $and) {

    $query = $query->where($and);

}


if($cond1) $ors['c'] = [3, 4, ...];

if($cond2) $ors['d'] = [5, 6, ...];

if($cond3) $ors['e'] = [7, 8, ...];

...


foreach($ors as $key => $or) {

    $query = $query->where(function($q) use ($key, $or) {

        $q->whereIn($key,$or);

     });

}


$query->get();


查看完整回答
反对 回复 2023-09-08
  • 4 回答
  • 0 关注
  • 290 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号