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实现jQuery扩展函数
Oct 30 PHP
PHP 实用代码收集
Jan 22 PHP
php数组函数序列之rsort() - 对数组的元素值进行降序排序
Nov 02 PHP
phpmailer发送gmail邮件实例详解
Jun 24 PHP
PHP实现根据银行卡号判断银行
Apr 29 PHP
既简单又安全的PHP验证码 附调用方法
Jun 02 PHP
手把手编写PHP框架 深入了解MVC运行流程
Sep 19 PHP
php微信公众号开发(2)百度BAE搭建和数据库使用
Dec 15 PHP
js基于qrcode.js生成二维码的方法【附demo插件源码下载】
Dec 28 PHP
PHP编程实现微信企业向用户付款的方法示例
Jul 26 PHP
PHP addAttribute()函数讲解
Feb 03 PHP
基于laravel缓冲cache的用法详解
Oct 23 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和MySql来与ODBC数据连接
2006/10/09 PHP
php 判断网页是否是utf8编码的方法
2014/06/06 PHP
Web程序工作原理详解
2014/12/25 PHP
php读取本地json文件的实例
2018/03/07 PHP
js 获取Listbox选择的值的代码
2010/04/15 Javascript
通过jQuery源码学习javascript(三)
2012/12/27 Javascript
jquery在项目中做复选框时遇到的一些问题笔记
2013/11/17 Javascript
jquery ajaxSubmit 异步提交的简单实现
2014/02/28 Javascript
jQuery实现拖动调整表格单元格大小的代码实例
2015/01/13 Javascript
JS遍历数组及打印数组实例分析
2016/01/21 Javascript
使用vue.js实现联动效果的示例代码
2017/01/10 Javascript
Bootstrap如何激活导航状态
2017/03/22 Javascript
Mac系统下Webstorm快捷键整理大全
2017/05/28 Javascript
使用Vue 实现滑动验证码功能
2019/06/27 Javascript
微信小程序服务器日期格式化问题
2020/01/07 Javascript
2019年度web前端面试题总结(主要为Vue面试题)
2020/01/12 Javascript
JavaScript位置参数实现原理及过程解析
2020/09/14 Javascript
[10:39]DOTA2上海特级锦标赛音乐会纪录片
2016/03/21 DOTA
[02:21]十步杀一人,千里不留行——DOTA2全新英雄天涯墨客展示
2018/08/29 DOTA
[05:00]TI9战队采访 - Royal Never Give Up
2019/08/20 DOTA
Python实现Pig Latin小游戏实例代码
2018/02/02 Python
Python3实现爬取指定百度贴吧页面并保存页面数据生成本地文档的方法
2018/04/22 Python
对Python正则匹配IP、Url、Mail的方法详解
2018/12/25 Python
在Python中过滤Windows文件名中的非法字符方法
2019/06/10 Python
用Cython加速Python到“起飞”(推荐)
2019/08/01 Python
Python3 使用selenium插件爬取苏宁商家联系电话
2019/12/23 Python
Numpy 理解ndarray对象的示例代码
2020/04/03 Python
Python使用for生成列表实现过程解析
2020/09/22 Python
HTML5有哪些新特征
2015/12/01 HTML / CSS
ParcelABC西班牙:包裹运送和快递服务
2019/12/24 全球购物
社会保险接收函
2014/01/12 职场文书
创先争优承诺书范文
2014/03/31 职场文书
开服装店计划书
2014/08/15 职场文书
学校领导班子对照检查材料
2014/08/28 职场文书
员工团队活动方案
2014/08/28 职场文书
运动会800米赞词
2015/07/22 职场文书