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 fckeditor 调用的函数
Jun 21 PHP
PHP Undefined index报错的修复方法
Jul 17 PHP
解析php中获取url与物理路径的总结
Jun 21 PHP
php自定义session示例分享
Apr 22 PHP
ThinkPHP整合百度Ueditor图文教程
Oct 21 PHP
php实现模拟登陆方正教务系统抓取课表
May 19 PHP
超详细的php用户注册页面填写信息完整实例(附源码)
Nov 17 PHP
PHP缓存工具XCache安装与使用方法详解
Apr 09 PHP
PHP+百度AI OCR文字识别实现了图片的文字识别功能
May 08 PHP
微信支付之JSAPI公众号支付详解
May 15 PHP
php探针使用原理和技巧讲解
Sep 17 PHP
PHP ob缓存以及ob函数原理实例解析
Nov 13 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入门学习知识点八 PHP中for循环基本应用之九九乘法口绝表
2011/07/14 PHP
验证javascript中Object和Function的关系的三段简单代码
2010/06/27 Javascript
JavaScript与DOM组合动态创建表格实例
2012/12/23 Javascript
jquery使用ajax实现微信自动回复插件
2014/04/28 Javascript
如何编写高质量JS代码
2014/12/28 Javascript
JS中捕获console.log()输出的方法
2015/04/16 Javascript
在JavaScript中操作时间之getYear()方法的使用教程
2015/06/11 Javascript
JavaScript是如何实现继承的(六种方式)
2016/03/31 Javascript
jQuery Mobile操作HTML5的常用函数总结
2016/05/17 Javascript
深入浅出ES6之let和const命令
2016/08/25 Javascript
关于javascript原型的修改与重写(覆盖)差别详解
2016/08/31 Javascript
Bootstrap警告(Alerts)的实现方法
2017/03/22 Javascript
React组件内事件传参实现tab切换的示例代码
2018/07/04 Javascript
详解Axios统一错误处理与后置
2018/09/26 Javascript
基于VUE实现的九宫格抽奖功能
2018/09/30 Javascript
解决vue 单文件组件中样式加载问题
2019/04/24 Javascript
Vue触发隐藏input file的方法实例详解
2019/08/14 Javascript
深入理解javascript prototype的相关知识
2019/09/19 Javascript
layui 地区三级联动 form select 渲染的实例
2019/09/27 Javascript
JavaScript Blob对象原理及用法详解
2020/10/14 Javascript
vue-cli —— 如何局部修改Element样式
2020/10/22 Javascript
使用python搭建服务器并实现Android端与之通信的方法
2019/06/28 Python
Python 的 __str__ 和 __repr__ 方法对比
2020/09/02 Python
CSS3制作酷炫的条纹背景
2017/11/09 HTML / CSS
基于HTML5 audio元素播放声音jQuery小插件
2011/05/11 HTML / CSS
施华洛世奇英国官网:SWAROVSKI英国
2017/03/13 全球购物
英国拳击装备购物网站:RDX Sports
2018/01/23 全球购物
照片礼物和装饰:MyPhoto
2019/11/02 全球购物
俄罗斯宠物用品网上商店:ZooMag
2019/12/12 全球购物
物流毕业生个人的自我评价
2014/02/13 职场文书
怎样写好自我评价呢?
2014/02/16 职场文书
副主任竞聘演讲稿
2014/08/18 职场文书
2014最新预备党员思想汇报范文:中国梦,我的梦
2014/10/25 职场文书
采购内勤岗位职责
2015/04/13 职场文书
民事上诉状范文
2015/05/22 职场文书
Python实现排序方法常见的四种
2021/07/15 Python