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 相关文章推荐
《PHP边学边教》(01.开篇――准备工作)
Dec 13 PHP
php下实现折线图效果的代码
Apr 28 PHP
简单的方法让你的后台登录更加安全(php中加session验证)
Aug 22 PHP
PHP引用符&amp;的用法详细解析
Aug 22 PHP
php使用curl发送json格式数据实例
Dec 17 PHP
CI分页类首页、尾页不显示的解决方法
Mar 28 PHP
Yii2实现ajax上传图片插件用法
Apr 28 PHP
PHP实现适用于文件内容操作的分页类
Jun 15 PHP
PHP实现带重试功能的curl连接示例
Jul 28 PHP
phpinfo()中Loaded Configuration File(none)的解决方法
Jan 16 PHP
PHP使用finfo_file()函数检测上传图片类型的实现方法
Apr 18 PHP
PHP实现的防止跨站和xss攻击代码【来自阿里云】
Jan 29 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简单命令代码集锦
2007/09/24 PHP
yii2实现Ueditor百度编辑器的示例代码
2018/11/02 PHP
全面兼容的javascript时间格式化函数(比较实用)
2014/05/14 Javascript
Javascript基础知识(三)BOM,DOM总结
2014/09/29 Javascript
jQuery中append()方法用法实例
2015/01/08 Javascript
jQuery实现菜单式图片滑动切换
2015/03/14 Javascript
JavaScript判断数字是否为质数的方法汇总
2016/06/02 Javascript
JavaScript函数中关于valueOf和toString的理解
2016/06/14 Javascript
基于JS实现发送短信验证码后的倒计时功能(无视页面刷新,页面关闭不进行倒计时功能)
2016/09/02 Javascript
完美的js div拖拽实例代码
2016/09/24 Javascript
详解angularJs中自定义directive的数据交互
2017/01/13 Javascript
深入nodejs中流(stream)的理解
2017/03/27 NodeJs
vue.js简单配置axios的方法详解
2017/12/13 Javascript
解决iview打包时UglifyJs报错的问题
2018/03/07 Javascript
小程序实现人脸识别功能(百度ai)
2018/12/23 Javascript
微信小程序实现页面跳转传递参数(实体,对象)
2019/08/12 Javascript
深入解析微信小程序开发中遇到的几个小问题
2020/07/11 Javascript
[01:05:32]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#1COL VS Alliance第一局
2016/03/04 DOTA
在Python中操作文件之truncate()方法的使用教程
2015/05/25 Python
Python制作简易注册登录系统
2016/12/15 Python
python中类变量与成员变量的使用注意点总结
2017/04/29 Python
django框架单表操作之增删改实例分析
2019/12/16 Python
HTML5安全介绍之内容安全策略(CSP)简介
2012/07/10 HTML / CSS
详解HTML5常用的语义化标签
2019/09/27 HTML / CSS
Canvas实现放大镜效果完整案例分析(附代码)
2020/11/26 HTML / CSS
美国网上购买眼镜:Eyeconic
2017/07/29 全球购物
优秀部门获奖感言
2014/02/14 职场文书
园林设计专业毕业生求职信
2014/03/23 职场文书
学生党员批评与自我批评
2014/10/15 职场文书
导游欢送词
2015/01/31 职场文书
幼儿园园务工作总结2015
2015/05/18 职场文书
2015年暑假工作总结
2015/07/13 职场文书
2016年国庆节67周年活动总结
2016/04/01 职场文书
人民币使用说明书
2019/04/17 职场文书
关于React Native使用axios进行网络请求的方法
2021/08/02 Javascript
sqlserver连接错误之SQL评估期已过的问题解决
2022/03/23 SQL Server