当用户名不为空时

SELECT * FROM `ACCOUNT_RECHARGE` LEFT JOIN `ORDER` ON `ACCOUNT_RECHARGE`.`OrderNo` = `ORDER`.`OrderNo` LEFT JOIN `USER_ACCOUNT` ON `ORDER`.`UserId` = `USER_ACCOUNT`.`UserId` WHERE (`USER_ACCOUNT`.`UserName` LIKE '%18%' OR (`USER_ACCOUNT`.`MobileNo` LIKE '%18%') OR (`USER_ACCOUNT`.`EMail` LIKE '%18%')) AND `ACCOUNT_RECHARGE`.`OrderTime` BETWEEN '2017-08-11 0:0:0' AND '2017-08-11 23:59:59' ORDER BY `ACCOUNT_RECHARGE`.`OrderTime` DESC;

上述SQL语句在laravel5.3中的一种写法:

$model = DB::connection('Order_User')->table('ACCOUNT_RECHARGE')

                 ->leftJoin('ORDER', 'ACCOUNT_RECHARGE.OrderNo', '=', 'ORDER.OrderNo')

                 ->leftJoin('USER_ACCOUNT', 'ORDER.UserId', '=', 'USER_ACCOUNT.UserId')
                 
->select('ACCOUNT_RECHARGE.*',  'USER_ACCOUNT.UserName', 'USER_ACCOUNT.MobileNo', 'USER_ACCOUNT.EMail')

                 ->orderBy('ACCOUNT_RECHARGE.OrderTime', 'DESC');
if (!empty($username)) {
$username = trim($username);
$model = $model->where(function($query) use ($username) {
  $query->where('USER_ACCOUNT.UserName', 'like', "%$username%")
     ->orWhere(function($query) use ($username) {
        $query->where('USER_ACCOUNT.MobileNo', 'like', "%$username%");
      });
     ->orWhere(function($query) use ($username) {
        $query->where('USER_ACCOUNT.EMail', 'like', "%$username%");
      });
  });
}

注意:在username不为空的判断里面,若没有使用use则会报未定义的变量username

对比

第一种

$model = $model->where(function($query) use ($username) {
  $query->where('USER_ACCOUNT.UserName', 'like', "%$username%")
     ->orWhere(function($query) use ($username) {
        $query->where('USER_ACCOUNT.MobileNo', 'like', "%$username%");
      });
     ->orWhere(function($query) use ($username) {
        $query->where('USER_ACCOUNT.EMail', 'like', "%$username%");
      });
  });
}

第二种

$model = $model >where('USER_ACCOUNT.UserName', 'like', "%$username%")->orWhere('MobileNo', 'like', "%$username%")->orWhere
('EMail', 'like', "%$username%");
}

的区别

第一种是局部的or条件,只是对username的or判断,而与其它条件是并且的关系,对照刚开始出现的SQL语句

而第二种是全局的or条件,若把第二种的语句替换掉第一种的语句,相当于SQL语句

SELECT * FROM `ACCOUNT_RECHARGE` LEFT JOIN `ORDER` ON `ACCOUNT_RECHARGE`.`OrderNo` = `ORDER`.`OrderNo` LEFT JOIN `USER_ACCOUNT` ON `ORDER`.`UserId` = `USER_ACCOUNT`.`UserId` WHERE `USER_ACCOUNT`.`UserName` LIKE '%18%' OR (`USER_ACCOUNT`.`MobileNo` LIKE '%18%') OR (`USER_ACCOUNT`.`EMail` LIKE '%18%') AND `ACCOUNT_RECHARGE`.`OrderTime` BETWEEN '2017-08-11 0:0:0' AND '2017-08-11 23:59:59' ORDER BY `ACCOUNT_RECHARGE`.`OrderTime` DESC;

这时,你会发现,只要username存在,你的其它条件就会失效。

这是我跳过的坑......

转载于:https://www.cnblogs.com/wyy-sunny/p/7387836.html

laravel5.3-数据库操作下的局部or条件与全局or条件(orWhere的局部与全局)相关推荐

  1. ThinkPHP6之数据库操作下

    ThinkPHP6之数据库操作下 前言 一,查询表达式 1.1 where 1.2table和name 1.3field 1.4limit 1.5page 1.6 order 二, 聚合查询 三,分页 ...

  2. Node.js SQL数据库操作 (上)(操作MySQL数据库及 数据库连接池)

    文章目录 Node.js MySQL驱动 操作 MySQL 数据库 连接 MySQL 数据库 增删改查操作 防止 SQL 注入攻击 数据库连接池操作 Node.js MySQL驱动 Node.js的原 ...

  3. java 无锁缓存_如何在高并发环境下设计出无锁的数据库操作(Java版本)

    一个在线2k的游戏,每秒钟并发都吓死人.传统的hibernate直接插库基本上是不可行的.我就一步步推导出一个无锁的数据库操作. 1. 并发中如何无锁. 一个很简单的思路,把并发转化成为单线程.Jav ...

  4. 如何在高并发环境下设计出无锁的数据库操作(Java版本) 转载

    一个在线2k的游戏,每秒钟并发都吓死人.传统的hibernate直接插库基本上是不可行的.我就一步步推导出一个无锁的数据库操作. 1. 并发中如何无锁. 一个很简单的思路,把并发转化成为单线程.Jav ...

  5. mysql在cmd命令下执行数据库操作

    2019独角兽企业重金招聘Python工程师标准>>> windows+r 运行cmd命令,执行以下操作! 当mysql 数据库文件相对于来说比较大的时候,这个时候你可能在正常环境下 ...

  6. nodeJS下利用mongdb进行数据库操作

    2019独角兽企业重金招聘Python工程师标准>>> 需要引用的node_modules npm install mongodb 此处引用的mongodb模块版本为1.4.12 一 ...

  7. Qt下Sqlite数据库操作

    Sqlite数据库作为Qt项目开发中经常使用的一个轻量级的数据库,可以说是兼容性相对比较好的数据库之一(Sqlite就像Qt的亲儿子,如同微软兼容Access数据库一样).关于Sqlite和Qt的千丝 ...

  8. android开发:如何在卸载应用程序操作下,不删除原来程序数据库?

    情景: 做项目中发现,如果手动卸载安卓应用程序,会清除掉应用原来的数据,比如sqlite3数据库中的数据,为了避免用户卸载应用程序操作下,不会删掉原来的数据. 实现: public class MyA ...

  9. dbproviderfactories.getfactory mysql_asp.net下使用DbProviderFactories的数据库操作类

    封装数据库操作,并且提供事务处理. 使用DbProviderFactories的数据库操作类 Imports System.Data Imports System.Configuration Impo ...

  10. 红橙Darren视频笔记 条件查询 删除 更新,数据库结合http做缓存机制(数据库操作)下

    查询 更新 删除的实现 修改IDaoSupport接口部分 删除查询部分 增加返回查询支持类接口 增加删除更新的接口 // 获取专门查询的支持类 按照语句查询QuerySupport<T> ...

最新文章

  1. g(n)= d∣n ∑ f( d n )_专栏F|Cora单词25衣服 (下):衣服也要配饰来搭配
  2. 算法工程师的效率神器——vim篇
  3. 运用 autoconf 和 automake 自动生成 Makefile 实例讲解
  4. ArcGIS网络分析之Silverlight客户端最近设施点分析(四)
  5. SpringBoot配置logback-spring.xml日志
  6. P5714 【深基3.例7】肥胖问题--python3实现
  7. wordpress常用插件打包 百度搜索推送插件+sitemap生成等
  8. lvm(逻辑卷--可扩展存储设备)
  9. 介绍一种在Xcode中删除一整行代码的快捷键设置,
  10. TimedRotatingFileHandler函数用法
  11. 软件开发的201个原则
  12. Python 接口并发测试详解
  13. (十)统计表速查(标准正态分布、t分布、卡方分布)
  14. npm与package.json详解
  15. 债务美元是怎样“炼成”的
  16. EasyNVR H5无插件摄像机直播解决方案前端解析之:videojs初始化的一些样式处理
  17. Java 作业题 输入年份求生肖
  18. Virtual Box虚拟机文件瘦身处理
  19. 2022年PMP考试会考试第七版本吗?
  20. mysql教学磁力链_【python小项目】网页爬虫+mysql数据库储存,爬虫xx视频网站视频磁力链接...

热门文章

  1. 怎么判断第几范式例题_学完就忘、做题就懵!初级会计怎么备考才能更高效?...
  2. linux系统q7文件,linux系统安装包的管理
  3. 百度安装php环境,Centos下安装类百度文库环境
  4. 数据结构—线性表及其实现方式
  5. 计算机网络复习题大全(各种题型)
  6. OpenGL基础39:GLSL内建变量与接口块
  7. LuaForUnity6:Lua模块
  8. bzoj 1047: [HAOI2007]理想的正方形
  9. docker 部署Gitlab
  10. python后台——asyncio,多进程+asyncio