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
Nov 25 PHP
PHP __autoload()方法真的影响性能吗?
Mar 30 PHP
PHP自动生成后台导航网址的最佳方法
Aug 27 PHP
浅谈PHP中output_buffering
Jul 13 PHP
详谈PHP编码转换问题
Jul 28 PHP
php微信开发之自定义菜单完整流程
Oct 08 PHP
php 中奖概率算法实现代码
Jan 25 PHP
php使用gd2绘制基本图形示例(直线、圆、正方形)
Feb 15 PHP
PHP用户管理中常用接口调用实例及解析(含源码)
Mar 09 PHP
ThinkPHP 在阿里云上的nginx.config配置实例详解
Oct 11 PHP
php实现的后台表格分页功能示例
Oct 23 PHP
php函数式编程简单示例
Aug 08 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
用文本文件制作留言板提示(上)
2006/10/09 PHP
IIS环境下快速安装、配置和调试PHP5.2.0
2006/12/17 PHP
php addslashes及其他清除空格的方法是不安全的
2012/01/25 PHP
超详细的php用户注册页面填写信息完整实例(附源码)
2015/11/17 PHP
Zend Framework入门知识点小结
2016/03/19 PHP
PHP使用redis消息队列发布微博的方法示例
2017/06/22 PHP
PHP array_reverse() 函数原理及实例解析
2020/07/14 PHP
IE 条件注释详解总结(附实例代码)
2009/08/29 Javascript
jquery 输入框数字限制插件
2009/11/10 Javascript
基于jquery封装的一个js分页
2011/11/15 Javascript
利用谷歌地图API获取点与点的距离的js代码
2012/10/11 Javascript
THREE.JS入门教程(2)着色器-上
2013/01/24 Javascript
javascript 原型链维护和继承详解
2014/11/26 Javascript
JavaScript获取网页中第一个图片id的方法
2015/04/03 Javascript
JQuery中DOM事件冒泡实例分析
2015/06/13 Javascript
JS实现响应鼠标点击动画渐变弹出层效果代码
2016/03/25 Javascript
jquery 中toggle的2种用法详解(推荐)
2016/09/02 Javascript
js实现一个猜数字游戏
2017/03/31 Javascript
深入理解vue.js中$watch的oldvalue与newValue
2017/08/07 Javascript
使用vue官方提供的模板vue-cli搭建一个helloWorld案例分析
2018/01/16 Javascript
Element-ui自定义table表头、修改列标题样式、添加tooltip、:render-header使用
2019/04/11 Javascript
细说webpack6 Babel的使用详解
2019/09/26 Javascript
python单例模式实例分析
2015/04/08 Python
在Python中使用zlib模块进行数据压缩的教程
2015/06/26 Python
学生信息管理系统Python面向对象版
2019/01/30 Python
pytorch GAN生成对抗网络实例
2020/01/10 Python
pytest fixtures装饰器的使用和如何控制用例的执行顺序
2021/01/28 Python
CSS3的新特性介绍
2008/10/31 HTML / CSS
英国在线电子和小工具商店:TecoBuy
2018/10/06 全球购物
软件测试企业面试试卷
2016/07/13 面试题
大学学习计划书范文
2014/05/02 职场文书
环保倡议书300字
2014/05/15 职场文书
2014年公路养护工作总结
2014/12/04 职场文书
为Java项目添加Redis缓存的方法
2021/05/18 Redis
mysql 8.0.27 绿色解压版安装教程及配置方法
2022/04/20 MySQL
python自动获取微信公众号最新文章的实现代码
2022/07/15 Python