Laravel复杂的'OR'与'AND'条件联合查询

版权声明:本文为博主原创文章,欢迎交流分享,未经博主允许不得转载。 https://blog.csdn.net/Jeffid/article/details/82998215

需求场景:查询中有部份条件是固定带上的,有部份条件是多选一的。
假定有数据表users,其中有字段idnameagesex,要求查出如伪代码:(id==3 && sex==1) OR (name=="jay" && age>18 && sex==1)示意的结果,即sex固定等于1,id等于3或者是 age>18且name等于jay。

查询构造器的示例:

//DB::enableQueryLog(); 

DB::table('users')
   ->where(function ($q) {  //闭包返回的条件会包含在括号中
       return $q->where('id', 3)
           ->orWhere([
               ['name', 'jay'],
               ['age', '>', '18']
           ]);
   })
   ->where('sex', 1)
   ->get();

//dd(DB::getQueryLog()); //查看SQL语句, 须配合enableQueryLog()使用

DB::getQueryLog()l输出的实际SQL执行语句:

array:1 [0 => array:3 ["query" => "select * from `users` where (`id` = ? or (`name` = ? and `age` > ?)) and `sex` = ?"
    "bindings" => array:4 [0 => 3
      1 => "jay"
      2 => "18"
      3 => 1
    ]
    "time" => 6.43
  ]
]

即:

"select * from `users` where (`id` = 3 or (`name` = "jay" and `age` > 18)) and `sex` = 1"

上面的示例是查询构造器的写法,Eloquent ORM也同样适用。

猜你喜欢

转载自blog.csdn.net/Jeffid/article/details/82998215