Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Laravel:如何在where子句中混合' and‘和'or’条件?

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

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

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$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-28 17:30:09

你可以这样做

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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-28 17:31:02

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

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

Stack Overflow用户

发布于 2020-07-28 17:31:20

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$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

复制
相关文章
SQL语句中 where 和 on 的区别
最近面试时候碰到一道题,关于数据库左连接和内连接中and和where的区别,网上看了看资料,加深一下印象,大家也可以看看。
浩Coding
2019/07/03
3.2K0
SQL 语句中 where 条件后 写上1=1 是什么意思
这段代码应该是由程序(例如Java)中生成的,where条件中 1=1 之后的条件是通过 if 块动态变化的。例如:
三哥
2019/07/30
3.6K1
SQL 语句中 where 条件后 写上 1=1 是什么意思
这段代码应该是由程序(例如Java)中生成的,where条件中 1=1 之后的条件是通过 if 块动态变化的。例如:
java进阶架构师
2020/04/02
9810
MySQL中where条件查询(where)
ha_lydms
2023/08/09
2990
sql join中on条件后接and和where
场景1:left join + on a.xx = b.xx and a.xx2 = 'aa'
不吃西红柿
2022/07/29
1.8K0
sql join中on条件后接and和where
SQL语句中where 1=1的意义
其中这个where1=1是有特殊意义的,包含以下两种情境:动态SQL拼接和查询表结构。
浩Coding
2019/07/03
3.7K0
sql语句中where与having的区别
Where 是一个约束声明,使用Where约束来自数据库的数据,Where是在结果返回之前起作用的,Where中不能使用聚合函数。 Having是一个过滤声明,是在查询返回结果集以后对查询结果进行的过滤操作,在Having中可以使用聚合函数。 在查询过程中聚合语句(sum,min,max,avg,count)要比having子句优先执行。而where子句在查询过程中执行优先级高于聚合语句。 下面用一个例子进一步说明问题。假设有数据表:
跑马溜溜的球
2020/12/07
1.6K0
MySQL where条件探索
mysql认为可能还用到了唯一索引,但实际并没有用到,还是只用到了联合索引, 再看key_len的长度和情况1一样,所以验证结论,where后只有第一个范围查 找才生效(如果第一个索引失效,则顺延)。如果有联合索引,仅最左侧的索引字段生效. 范围查询+等值匹配 优先有索引的等值查询
晓果冻
2022/09/08
1.8K0
MySQL where条件探索
left join-on-and 与 left join-on-where 和 inner join on 加条件和where加条件的区别
在多表查询时,on 比 where 更早起作用。系统首先根据各个表之间的联接条件,把多个表合成一个临时表后,再由 where 进行过滤,然后再计算,计算完后再由 having 进行过滤。由此可见,要想过滤条件起到正确的作用,首先要明白这个条件应该在什么时候起作用,然后再决定放在那里。
botkenni
2023/05/23
2.6K0
left join-on-and 与 left join-on-where 和 inner join on 加条件和where加条件的区别
Python 条件语句中的else
条件语句中的else 什么是else else 就是对于if条件不满足的时候执行另一个代码块的入口 功能 当if语句不满足时所执行的代码块的入口 用法 if bool_result : do else: elsedo # else语法快 , 需缩进 # 缩进等级与do语法块一致 参数 elsedo : else 语句对应的python代码块 返回值 else属于语法 , 没有返回值 代码 # coding:utf-8 url = 'https://code.maylove.pub'
Zkeq
2022/05/18
1.8K0
Python 条件语句中的else
Python 条件语句中的elif
条件语句中的elif 什么是elif elif(或者如果)对于命题的非第一次的多种判断 , 每一种判断条件对应一组业务代码 条件语句的说明 对于首次if判断不满足后 , 其他条件的判断语句 用法 if bool_result : do elif bool_result: elifdo # 当前elif语句对应的语法块 elif bool_result: elifdo # 缩进等级与do语法块一致 else: elsedo 参数 elifdo : 当前elif语句对应的python代码 返回
Zkeq
2022/05/18
1.3K0
Python 条件语句中的elif
laravel where orwhere的写法
要写成一组查询条件需要这样闭包写(就相当于把这两个条件放在一个小括号里,是一组查询条件“(xxx or xxx)”):
全栈程序员站长
2022/07/08
7600
MySQL复杂where条件分析
在《MySQL 常见语句加锁分析》一文中,我们详细讲解了 SQL 语句的加锁原理并具体分析了大部分的简单 SQL 语句,但是实际业务场景中 SQL 语句往往及其复杂,包含多个条件,此时就需要具体分析SQL 使用到的索引,并了解 where 条件的判断逻辑。
程序员历小冰
2020/08/31
2.4K0
MySQL复杂where条件分析
Laravel orWhere条件
需要根据三个条件去查询结果集,三个条件的关系是A and (B or C),B条件和C条件有交集,需要取出他两的并集。 如果用户登录(UID存在),条件为A and (B or C),用户未登录,查询条件为:A and B
句小芒
2022/12/29
3560
sql中的过滤条件放在on和where的区别
最近遇到相关业务,想揪一下sql的中的left join 或者right join 或者inner join 中的 on和where的区别,想了解这个首先我们要了解两个基础的知识。
公众号-利志分享
2022/04/25
3.8K0
SQL中JOIN时条件放在Where和On的区别
SQL中JOIN子句是用于把来自两个或多个表的数据连接起来,在这个过程中可能会添加一些过滤条件。昨天有小伙伴问,如下图的这两种SQL写法查询结果是否会一样?(好像这是某一年阿里的面试题)
Python数据科学
2020/11/11
3.5K0
SQL中JOIN时条件放在Where和On的区别
HQL语句中加limit()的限制条件
query.setFirstResult(startIndex);//开始索引 query.setMaxResults(maxSize);//取几条 如 limit 1,5  HQL: query.setFirstResult(1); query.setMaxResults(5);
似水的流年
2019/12/10
1.8K0
HQL语句中加limit()的限制条件
query.setFirstResult(startIndex);//开始索引 query.setMaxResults(maxSize);//取几条 如 limit 1,5  HQL: query.setFirstResult(1); query.setMaxResults(5);
似水的流年
2018/01/12
1.6K0
SQL语句中 left join 后用 on 还是 where,区别大了!
前天写SQL时本想通过 A left B join on and 后面的条件来使查出的两条记录变成一条,奈何发现还是有两条。
全栈程序员站长
2022/07/19
4800
SQL语句中 left join 后用 on 还是 where,区别大了!
点击加载更多

相似问题

Laravel -如何在where子句中写出多个条件?

42

where子句中的条件子查询

33

在where子句中添加子条件

40

Laravel查询: Where子句中的条件值

12

子查询作为WHERE语句中的条件

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文