tp5.1 框架查询表达式用法详解


Posted in PHP onMay 25, 2020

本文实例讲述了tp5.1 框架查询表达式用法。分享给大家供大家参考,具体如下:

查询表达式

查询表达式支持大部分的SQL查询语法,也是ThinkPHP查询语言的精髓,查询表达式的使用格式:

where('字段名','表达式','查询条件');
whereOr('字段名','表达式','查询条件');

5.1还支持新的查询方法

whereField('表达式','查询条件');
whereOrField('表达式','查询条件');

Field使用字段的驼峰命名方式。

表达式不分大小写,支持的查询表达式有下面几种:

表达式 含义 快捷查询方法
= 等于  
不等于  
> 大于  
>= 大于等于  
小于  
小于等于  
[NOT] LIKE 模糊查询 whereLike/whereNotLike
[NOT] BETWEEN (不在)区间查询 whereBetween/whereNotBetween
[NOT] IN (不在)IN 查询 whereIn/whereNotIn
[NOT] NULL 查询字段是否(不)是NULL whereNull/whereNotNull
[NOT] EXISTS EXISTS查询 whereExists/whereNotExists
[NOT] REGEXP 正则(不)匹配查询(仅支持Mysql)  
[NOT] BETWEEM TIME 时间区间比较 whereBetweenTime
> TIME 大于某个时间 whereTime
小于某个时间 whereTime
>= TIME 大于等于某个时间 whereTime
小于等于某个时间 whereTime
EXP 表达式查询,支持SQL语法 whereExp

表达式查询的用法示例如下:

等于(=)

例如:

Db::name('user')->where('id','=',100)->select();

和下面的查询等效

Db::name('user')->where('id',100)->select();

最终生成的SQL语句是:

SELECT * FROM `think_user` WHERE `id` = 100

不等于(<>)

例如:

Db::name('user')->where('id','<>',100)->select();

最终生成的SQL语句是:

SELECT * FROM `think_user` WHERE `id` <> 100

大于(>)

例如:

Db::name('user')->where('id','>',100)->select();

最终生成的SQL语句是:

SELECT * FROM `think_user` WHERE `id` > 100

大于等于(>=)

例如:

Db::name('user')->where('id','>=',100)->select();

最终生成的SQL语句是:

SELECT * FROM `think_user` WHERE `id` >= 100

小于(<)

例如:

Db::name('user')->where('id','<',100)->select();

最终生成的SQL语句是:

SELECT * FROM `think_user` WHERE `id` < 100

小于等于(<=)

例如:

Db::name('user')->where('id','<=',100)->select();

最终生成的SQL语句是:

SELECT * FROM `think_user` WHERE `id` <= 100

[NOT] LIKE: 同sql的LIKE

例如:

Db::name('user')->where('name','like','thinkphp%')->select();

最终生成的SQL语句是:

SELECT * FROM `think_user` WHERE `name` LIKE 'thinkphp%'

like查询支持使用数组

Db::name('user')->where('name','like',['%think','php%'],'OR')->select();

实际生成的SQL语句为:

SELECT * FROM `think_user` 
WHERE (`name` LIKE '%think' OR `name` LIKE 'php%')

为了更加方便,应该直接使用whereLike方法

Db::name('user')->whereLike('name','thinkphp%')->select();
Db::name('user')->whereNotLike('name','thinkphp%')->select();

[NOT] BETWEEN :同sql的[not] between

查询条件支持字符串或者数组,例如:

Db::name('user')->where('id','between','1,8')->select();

和下面的等效:

Db::name('user')->where('id','between',[1,8])->select();

最终生成的SQL语句都是:

SELECT * FROM `think_user` WHERE `id` BETWEEN 1 AND 8

最快捷的查询方法是:

Db::name('user')->whereBetween('id','1,8')->select();
Db::name('user')->whereNotBetween('id','1,8')->select();

[NOT] IN: 同sql的[not] in

查询条件支持字符串或者数组,例如:

Db::name('user')->where('id','in','1,5,8')->select();

和下面的等效:

Db::name('user')->where('id','in',[1,5,8])->select();

最终的SQL语句为:

SELECT * FROM `think_user` WHERE `id` IN (1,5,8)

最快捷的查询方法是:

Db::name('user')->whereIn('id','1,5,8')->select();
Db::name('user')->whereNotIn('id','1,5,8')->select();

 

[NOT] IN查询支持使用闭包方式

[NOT] NULL :

查询字段是否(不)是Null,例如:

Db::name('user')->where('name', null)
->where('email','null')
->where('name','not null')
->select();

实际生成的SQL语句为:

SELECT * FROM `think_user` 
WHERE `name` IS NULL 
AND `email` IS NULL 
AND `name` IS NOT NULL

如果你需要查询一个字段的值为字符串null或者not null,应该使用:

Db::name('user')->where('title','=', 'null')
->where('name','=', 'not null')
->select();

推荐的方式是使用whereNullwhereNotNull方法查询。

Db::name('user')->whereNull('name')
->whereNull('email')
->whereNotNull('name')
->select();

EXP:表达式

支持更复杂的查询情况 例如:

Db::name('user')->where('id','in','1,3,8')->select();

可以改成:

Db::name('user')->where('id','exp',' IN (1,3,8) ')->select();

exp查询的条件不会被当成字符串,所以后面的查询条件可以使用任何SQL支持的语法,包括使用函数和字段名称。

动态查询

对于上面的查询表达式,可以使用动态查询方法进行简化,例如:

Db::name('user')->where('id','>=',100)->select();

可以简化为:

Db::name('user')->whereId('>=',100)->select();

希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

PHP 相关文章推荐
一个分页的论坛
Oct 09 PHP
PHP url 加密解密函数代码
Aug 26 PHP
解析百度搜索结果link?url=参数分析 (全)
Oct 09 PHP
基于php socket(fsockopen)的应用实例分析
Jun 02 PHP
php数组声明、遍历、数组全局变量使用小结
Jun 05 PHP
php自动加载autoload机制示例分享
Feb 20 PHP
PHP取余函数介绍MOD(x,y)与x%y
May 15 PHP
非常重要的php正则表达式详解
Jan 04 PHP
php计算给定日期所在周的开始日期和结束日期示例
Feb 06 PHP
php上传后台无法收到数据解决方法
Oct 28 PHP
Thinkphp 框架扩展之应用模式实现方法分析
Apr 27 PHP
VSCode+PHPstudy配置PHP开发环境的步骤详解
Aug 20 PHP
tp5.1 框架数据库高级查询技巧实例总结
May 25 #PHP
thinkphp5.1 框架导入/导出excel文件操作示例
May 25 #PHP
thinkphp5.1框架模板赋值与变量输出示例
May 25 #PHP
thinkphp5.1 框架钩子和行为用法实例分析
May 25 #PHP
php7 参数、整形及字符串处理机制修改实例分析
May 25 #PHP
php7 错误处理机制修改实例分析
May 25 #PHP
php7 list()、session及其他模块的修改实例分析
May 25 #PHP
You might like
PHP提示Warning:phpinfo() has been disabled函数禁用的解决方法
2014/12/17 PHP
Yii框架结合sphinx,Ajax实现搜索分页功能示例
2016/10/18 PHP
jQuery News Ticker 基于jQuery的即时新闻行情展示插件
2011/11/05 Javascript
jquery插件lazyload.js延迟加载图片的使用方法
2014/02/19 Javascript
基于豆瓣API+Angular开发的web App
2015/01/02 Javascript
javascript禁止访客复制网页内容的实现代码
2015/08/05 Javascript
Vue组件通信的四种方式汇总
2018/02/08 Javascript
webpack打包并将文件加载到指定的位置方法
2018/02/22 Javascript
angular2路由之routerLinkActive指令【推荐】
2018/05/30 Javascript
vue如何根据网站路由判断页面主题色详解
2018/11/02 Javascript
js实现登录时记住密码的方法分析
2020/04/05 Javascript
详解Vue3 Composition API中的提取和重用逻辑
2020/04/29 Javascript
ajax jquery实现页面某一个div的刷新效果
2021/03/04 jQuery
python批量制作雷达图的实现方法
2016/07/26 Python
python机器学习理论与实战(六)支持向量机
2018/01/19 Python
python try except 捕获所有异常的实例
2018/10/18 Python
python抓取京东小米8手机配置信息
2018/11/13 Python
解决Python 命令行执行脚本时,提示导入的包找不到的问题
2019/01/19 Python
python实现数字炸弹游戏
2020/07/17 Python
django创建css文件夹的具体方法
2020/07/31 Python
python获取命令行参数实例方法讲解
2020/11/02 Python
Django restful framework生成API文档过程详解
2020/11/12 Python
Android本地应用打开方法——通过html5写连接
2016/03/11 HTML / CSS
HTML5地理定位_动力节点Java学院整理
2017/07/12 HTML / CSS
expedia比利时:预订航班+酒店并省钱
2018/07/13 全球购物
英国豪华装饰照明品牌的在线零售商:Inspyer Lighting
2019/12/10 全球购物
GC是什么?为什么要有GC?
2013/12/08 面试题
出纳岗位职责模板
2013/11/27 职场文书
三年级音乐教学反思
2014/01/28 职场文书
技术员岗位职责范本
2015/04/11 职场文书
学校党支部承诺书
2015/04/30 职场文书
赢在中国观后感
2015/06/02 职场文书
毕业晚宴祝酒词
2015/08/11 职场文书
2016年过年放假安排通知
2015/08/18 职场文书
Python利用FlashText算法实现替换字符串
2022/03/31 Python
golang为什么要统一错误处理
2022/04/03 Golang