php - Laravel:如何在 where 子句中混合 'and' 和 'or' 条件?
问题描述
我搜索并找到了类似的帖子,但没有一个与我的情况相同。似乎 Laravel 文档没有显示像我这样的案例,尽管我的案例在数据库查询的 where 子句中很常见。
在我的情况下,where 子句如下所示,我无法使用 where() 和 orwhere() 方法以及人们在其他帖子中建议的技巧。任何信息表示赞赏。谢谢。
where a = 1 and b = 2 and (c = 3 or c = 4) and (d = 5 or d = 6)
另一个复杂程度是,我可以将所有“和”条件组合到一个数组中并将其提供给一个 where() 方法,但我必须将“或”条件分组到单独的数组中,以及在代码中动态收集多少组,例如以下。
$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() 方法。这样做很简单,而且效果很好。
解决方案
你可以这样做
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();
推荐阅读
- javascript - 在 react-native-geolocation-service 中使用 Promise 从另一个文件获取位置
- crashpad - 如何从小型转储文件中获取崩溃的进程 ID
- c# - 授予 .NET 应用程序管理员权限
- javascript - 如何在ngrx效果中制作嵌套的bitbucket API http请求
- c++ - 在创建 pdf 文件期间处理 HPDF_FAILD_TO_ALLOC_MEM
- python - 使用 OpenCV 在 python 中比较和裁剪图像
- javascript - 如何调用另一个函数的if语句中的函数
- oracle - oracle中如何使用%进行计算
- azure-devops - Azure DevOps 管道表达式
- maven - ProGet 上传本地工件