laravel5.3-数据库操作下的局部or条件与全局or条件(orWhere的局部与全局)
当用户名不为空时
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的局部与全局)相关推荐
- ThinkPHP6之数据库操作下
ThinkPHP6之数据库操作下 前言 一,查询表达式 1.1 where 1.2table和name 1.3field 1.4limit 1.5page 1.6 order 二, 聚合查询 三,分页 ...
- Node.js SQL数据库操作 (上)(操作MySQL数据库及 数据库连接池)
文章目录 Node.js MySQL驱动 操作 MySQL 数据库 连接 MySQL 数据库 增删改查操作 防止 SQL 注入攻击 数据库连接池操作 Node.js MySQL驱动 Node.js的原 ...
- java 无锁缓存_如何在高并发环境下设计出无锁的数据库操作(Java版本)
一个在线2k的游戏,每秒钟并发都吓死人.传统的hibernate直接插库基本上是不可行的.我就一步步推导出一个无锁的数据库操作. 1. 并发中如何无锁. 一个很简单的思路,把并发转化成为单线程.Jav ...
- 如何在高并发环境下设计出无锁的数据库操作(Java版本) 转载
一个在线2k的游戏,每秒钟并发都吓死人.传统的hibernate直接插库基本上是不可行的.我就一步步推导出一个无锁的数据库操作. 1. 并发中如何无锁. 一个很简单的思路,把并发转化成为单线程.Jav ...
- mysql在cmd命令下执行数据库操作
2019独角兽企业重金招聘Python工程师标准>>> windows+r 运行cmd命令,执行以下操作! 当mysql 数据库文件相对于来说比较大的时候,这个时候你可能在正常环境下 ...
- nodeJS下利用mongdb进行数据库操作
2019独角兽企业重金招聘Python工程师标准>>> 需要引用的node_modules npm install mongodb 此处引用的mongodb模块版本为1.4.12 一 ...
- Qt下Sqlite数据库操作
Sqlite数据库作为Qt项目开发中经常使用的一个轻量级的数据库,可以说是兼容性相对比较好的数据库之一(Sqlite就像Qt的亲儿子,如同微软兼容Access数据库一样).关于Sqlite和Qt的千丝 ...
- android开发:如何在卸载应用程序操作下,不删除原来程序数据库?
情景: 做项目中发现,如果手动卸载安卓应用程序,会清除掉应用原来的数据,比如sqlite3数据库中的数据,为了避免用户卸载应用程序操作下,不会删掉原来的数据. 实现: public class MyA ...
- dbproviderfactories.getfactory mysql_asp.net下使用DbProviderFactories的数据库操作类
封装数据库操作,并且提供事务处理. 使用DbProviderFactories的数据库操作类 Imports System.Data Imports System.Configuration Impo ...
- 红橙Darren视频笔记 条件查询 删除 更新,数据库结合http做缓存机制(数据库操作)下
查询 更新 删除的实现 修改IDaoSupport接口部分 删除查询部分 增加返回查询支持类接口 增加删除更新的接口 // 获取专门查询的支持类 按照语句查询QuerySupport<T> ...
最新文章
- g(n)= d∣n ∑ f( d n )_专栏F|Cora单词25衣服 (下):衣服也要配饰来搭配
- 算法工程师的效率神器——vim篇
- 运用 autoconf 和 automake 自动生成 Makefile 实例讲解
- ArcGIS网络分析之Silverlight客户端最近设施点分析(四)
- SpringBoot配置logback-spring.xml日志
- P5714 【深基3.例7】肥胖问题--python3实现
- wordpress常用插件打包 百度搜索推送插件+sitemap生成等
- lvm(逻辑卷--可扩展存储设备)
- 介绍一种在Xcode中删除一整行代码的快捷键设置,
- TimedRotatingFileHandler函数用法
- 软件开发的201个原则
- Python 接口并发测试详解
- (十)统计表速查(标准正态分布、t分布、卡方分布)
- npm与package.json详解
- 债务美元是怎样“炼成”的
- EasyNVR H5无插件摄像机直播解决方案前端解析之:videojs初始化的一些样式处理
- Java 作业题 输入年份求生肖
- Virtual Box虚拟机文件瘦身处理
- 2022年PMP考试会考试第七版本吗?
- mysql教学磁力链_【python小项目】网页爬虫+mysql数据库储存,爬虫xx视频网站视频磁力链接...
热门文章
- 怎么判断第几范式例题_学完就忘、做题就懵!初级会计怎么备考才能更高效?...
- linux系统q7文件,linux系统安装包的管理
- 百度安装php环境,Centos下安装类百度文库环境
- 数据结构—线性表及其实现方式
- 计算机网络复习题大全(各种题型)
- OpenGL基础39:GLSL内建变量与接口块
- LuaForUnity6:Lua模块
- bzoj 1047: [HAOI2007]理想的正方形
- docker 部署Gitlab
- python后台——asyncio,多进程+asyncio