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 第二节 数据类型之数值型
Apr 28 PHP
PHP5权威编程阅读学习笔记 附电子书下载
Jul 05 PHP
php excel reader读取excel内容存入数据库实现代码
Dec 06 PHP
php实现遍历目录并删除指定文件中指定内容
Jan 21 PHP
Laravel5中contracts详解
Mar 02 PHP
php实现给一张图片加上水印效果
Jan 02 PHP
深入解析PHP的Yii框架中的缓存功能
Mar 29 PHP
php上传图片类及用法示例
May 11 PHP
图文详解phpstorm配置Xdebug进行调试PHP教程
Jun 13 PHP
php文件类型MIME对照表(比较全)
Oct 07 PHP
PHP设计模式之装饰器模式定义与用法详解
Apr 02 PHP
基于Laravel 多个中间件的执行顺序详解
Oct 21 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
海河写的 Discuz论坛帖子调用js的php代码
2007/08/23 PHP
Laravel框架数据库CURD操作、连贯操作总结
2014/09/03 PHP
非常经典的PHP文件上传类分享
2016/05/15 PHP
php表单文件iframe异步上传实例讲解
2017/07/26 PHP
TP5(thinkPHP5)框架使用ajax实现与后台数据交互的方法小结
2020/02/10 PHP
js如何获取file控件的完整路径具体实现代码
2013/05/15 Javascript
js控制淡入淡出示例代码
2013/11/12 Javascript
含有CKEditor的表单如何提交
2014/01/09 Javascript
JavaScript模拟可展开、拖动与关闭的聊天窗口实例
2015/05/12 Javascript
jQuery实现类似淘宝网图片放大效果的方法
2015/07/08 Javascript
包含中国城市的javascript对象实例
2015/08/03 Javascript
全面解析Bootstrap中tooltip、popover的使用方法
2016/06/13 Javascript
JS 对java返回的json格式的数据处理方法
2016/12/05 Javascript
jquery 实时监听输入框值变化的完美方法(必看)
2017/01/26 Javascript
ES6新特性之Symbol类型用法分析
2017/03/31 Javascript
JavaScript数据结构学习之数组、栈与队列
2017/05/02 Javascript
详解angular应用容器化部署
2018/08/14 Javascript
javascript使用substring实现的展开与收缩文字功能示例
2019/06/17 Javascript
jquery实现垂直手风琴导航栏
2020/02/18 jQuery
js抽奖转盘实现方法分析
2020/05/16 Javascript
解决Vue router-link绑定事件不生效的问题
2020/07/22 Javascript
Vue文本模糊匹配功能如何实现
2020/07/30 Javascript
[01:59]深扒TI7聊天轮盘语音出处 1
2017/05/11 DOTA
[42:24]完美世界DOTA2联赛循环赛 LBZS vs DM BO2第一场 11.01
2020/11/02 DOTA
python中使用OpenCV进行人脸检测的例子
2014/04/18 Python
Python图片裁剪实例代码(如头像裁剪)
2017/06/21 Python
python matplotlib 注释文本箭头简单代码示例
2018/01/08 Python
Python装饰器知识点补充
2018/05/28 Python
python cumsum函数的具体使用
2019/07/29 Python
django表单中的按钮获取数据的实例分析
2020/07/31 Python
艺术用品:Arteza
2018/11/25 全球购物
幼儿园消防演练方案
2014/02/13 职场文书
公司委托书格式范文
2014/04/04 职场文书
《月光曲》教学反思
2016/02/16 职场文书
MySQL笔记 —SQL运算符
2022/01/18 MySQL
我们认为中短波广播场强仪的最佳组合
2022/04/05 无线电