Yii框架where查询用法实例分析


Posted in PHP onOctober 22, 2019

本文实例讲述了Yii框架where查询用法。分享给大家供大家参考,具体如下:

1.简述

Yii的查询操作找使用where用的很多 总结下常用的哈希格式与操作符格式

2.操作符格式

适用于操作符的

[操作符, 操作数1, 操作数2, ...]

[ 'LIKE','nickname','%'.strtr($mix_kw,['%'=>'\%', '_'=>'\_', '\\'=>'\\\\']).'%', false ];
  • and:操作数会被 AND 关键字串联起来。例如,['and', 'id=1', 'id=2'] 将会生成 id=1 AND id=2。如果操作数是一个数组,它也会按上述规则转换成 字符串。例如,['and', 'type=1', ['or', 'id=1', 'id=2']] 将会生成 type=1 AND (id=1 OR id=2)。 这个方法不会自动加引号或者转义。
  • or:用法和 and 操作符类似,这里就不再赘述。
  • not:只需要操作数 1,它将包含在 NOT() 中。例如,['not','id = 1'] 将生成 ['not', 'id=1']。操作数 1 也可以是个描述多个表达式的数组。例如 ['not', ['status' => 'draft', 'name' =>'example']] 将生成 NOT ((status='draft') AND (name='example'))。
  • between:第一个操作数为字段名称,第二个和第三个操作数代表的是这个字段 的取值范围。例如,

['between', 'id', 1, 10] 将会生成 id BETWEEN 1 AND 10。 如果你需要建立一个值在两列之间的查询条件(比如 11 BETWEEN min_id AND max_id), 你应该使用 BetweenColumnsCondition。 请参阅 条件-对象格式 一章以了解有关条件的对象定义的更多信息。

  • not between:与 between 类似,除了 BETWEEN 被 NOT BETWEEN 替换 在生成条件时。

in:第一个操作数应为字段名称或者 DB 表达式。第二个操作符既可以是一个数组, 也可以是一个 Query 对象。它会转换成IN 条件语句。如果第二个操作数是一个 数组,那么它代表的是字段或 DB 表达式的取值范围。如果第二个操作数是 Query 对象,那么这个子查询的结果集将会作为第一个操作符的字段或者 DB 表达式的取值范围。 例如, ['in', 'id', [1, 2, 3]] 将生成 id IN (1, 2, 3)。 该方法将正确地为字段名加引号以及为取值范围转义。in 操作符还支持组合字段,此时, 操作数1应该是一个字段名数组,而操作数2应该是一个数组或者 Query 对象, 代表这些字段的取值范围。

  • not in:用法和 in 操作符类似,这里就不再赘述。
  • like:

第一个操作数应为一个字段名称或 DB 表达式,

第二个操作数可以使字符串或数组, 代表第一个操作数需要模糊查询的值。比如,['like', 'name','tester'] 会生成 name LIKE '%tester%'。如果范围值是一个数组,那么将会生成用 AND 串联起来的 多个 like 语句。例如,['like', 'name', ['test', 'sample']] 将会生成 name LIKE '%test%' AND name LIKE '%sample%'。

第三个可选的操作数来指定应该如何转义数值当中的特殊字符。 该操作数是一个从需要被转义的特殊字符到转义副本的数组映射。 如果没有提供这个操作数,将会使用默认的转义映射。如果需要禁用转义的功能, 只需要将参数设置为 false 或者传入一个空数组即可。需要注意的是, 当使用转义映射(又或者没有提供第三个操作数的时候),第二个操作数的值的前后 将会被加上百分号。

  • or like:用法和 like 操作符类似,区别在于当第二个操作数为数组时, 会使用 OR 来串联多个 LIKE 条件语句。
  • not like:用法和 like 操作符类似,区别在于会使用 NOT LIKE 来生成条件语句。
  • or not like:用法和 not like 操作符类似,区别在于会使用 OR 来串联多个 NOT LIKE 条件语句。
  • exists:需要一个操作数,该操作数必须是代表子查询 yii\db\Query 的一个实例, 它将会构建一个 EXISTS (sub-query) 表达式。
  • not exists:用法和 exists 操作符类似,它将创建一个 NOT EXISTS (sub-query) 表达式。

>,<= 或者其他包含两个操作数的合法 DB 操作符:第一个操作数必须为字段的名称, 而第二个操作数则应为一个值。例如,['>', 'age', 10] 将会生成 age>10。

3.哈希格式

适用于简单的查询的

它是以数组的形式来书写的,数组的键表示字段的名称,而数组的值则表示 这个字段需要匹配的值。例如:

// ...WHERE (`status` = 10) AND (`type` IS NULL) AND (`id` IN (4, 8, 15))
$query->where([
  'status' => 10,
  'type' => null,
  'id' => [4, 8, 15],
]);

4.附加条件

你可以使用 andWhere() 或者 orWhere() 在原有条件的基础上 附加额外的条件

5.过滤条件

当 WHERE 条件来自于用户的输入时,你通常需要忽略用户输入的空值。 例如,在一个可以通过用户名或者邮箱搜索的表单当中,用户名或者邮箱 输入框没有输入任何东西,这种情况下你想要忽略掉对应的搜索条件, 那么你就可以使用 filterWhere() 方法来实现这个目的:

// $username 和 $email 来自于用户的输入
$query->filterWhere([
  'username' => $username,
  'email' => $email,
]);

filterWhere() 和 where() 唯一的不同就在于,前者 将忽略在条件当中的hash format的空值。所以如果$email 为空而 $username 不为空,那么上面的代码最终将生产如下 SQL ...WHERE username=:username。

提示: 当一个值为 null、空数组、空字符串或者一个只包含空格的字符串时,那么它将被判定为空值。

希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。

PHP 相关文章推荐
PHP中创建空文件的代码[file_put_contents vs touch]
Jan 20 PHP
PHP文章采集URL补全函数(FormatUrl)
Aug 02 PHP
PHP数据集构建JSON格式及新数组的方法
Nov 07 PHP
PHP数据类型之整数类型、浮点数的介绍
Apr 28 PHP
解析用PHP实现var_export的详细介绍
Jun 20 PHP
PHP整合七牛实现上传文件
Jul 03 PHP
深入理解PHP内核(一)
Nov 10 PHP
php中Redis的应用--消息传递
Mar 28 PHP
laravel 5.3中自定义加密服务的方案详解
May 09 PHP
laravel通过创建自定义artisan make命令来新建类文件详解
Aug 17 PHP
laravel Task Scheduling(任务调度)在windows下的使用详解
Oct 22 PHP
php7连接MySQL实现简易查询程序的方法
Oct 13 PHP
Laravel手动返回错误码示例
Oct 22 #PHP
Laravel 6.2 中添加了可调用容器对象的方法
Oct 22 #PHP
浅谈Laravel模板实体转义带来的坑
Oct 22 #PHP
Laravel定时任务的每秒执行代码
Oct 22 #PHP
Laravel框架实现定时Task Scheduling例子
Oct 22 #PHP
laravel 解决强制跳转 https的问题
Oct 22 #PHP
Laravel重定向,a链接跳转,控制器跳转示例
Oct 22 #PHP
You might like
PHP4和PHP5共存于一系统
2006/11/17 PHP
php加密解密函数authcode的用法详细解析
2013/10/28 PHP
tp5.1 框架join方法用法实例分析
2020/05/26 PHP
日期 时间js控件
2009/05/07 Javascript
javascript 继承实现方法
2009/08/26 Javascript
兼容ie、firefox的图片自动缩放的css跟js代码分享
2012/01/21 Javascript
javascript加号&quot;+&quot;的二义性说明
2013/03/04 Javascript
js跨浏览器实现将字符串转化为xml对象的方法
2013/09/25 Javascript
页面加载完后自动执行一个方法的js代码
2014/09/06 Javascript
js实现图片从左往右渐变切换效果的方法
2015/02/06 Javascript
jQuery插件实现大图全屏图片相册
2015/03/14 Javascript
原生JS实现导航下拉菜单效果
2020/11/25 Javascript
详解Javascript获取缓存和清除缓存API
2017/05/25 Javascript
小程序如何支持使用 async/await详解
2019/09/12 Javascript
javascript设计模式 ? 外观模式原理与用法实例分析
2020/04/15 Javascript
解决vue项目router切换太慢问题
2020/07/19 Javascript
举例讲解Python中字典的合并值相加与异或对比
2016/06/04 Python
Python实现两个list对应元素相减操作示例
2017/06/09 Python
Python 类,property属性(简化属性的操作),@property,property()用法示例
2019/10/12 Python
关于win10在tensorflow的安装及在pycharm中运行步骤详解
2020/03/16 Python
python图片指定区域替换img.paste函数的使用
2020/04/09 Python
Html5调用手机摄像头并实现人脸识别的实现
2018/12/21 HTML / CSS
Vilebrequin欧洲官网:法国豪华泳装品牌(男士沙滩裤)
2018/04/14 全球购物
阿迪达斯英国官方网站:adidas英国
2019/08/13 全球购物
Discard Protocol抛弃协议的作用是什么
2015/10/10 面试题
汽车技术服务与营销专业推荐信
2013/11/29 职场文书
项目专员岗位职责
2013/12/04 职场文书
自动化职业生涯规划书范文
2014/01/03 职场文书
实习单位接收函
2014/01/11 职场文书
四群教育工作实施方案
2014/03/26 职场文书
公司请假条范文
2014/04/11 职场文书
2016年党建工作简报
2015/11/26 职场文书
2016春季田径运动会广播稿
2015/12/21 职场文书
如何拟写通知正文?
2019/04/02 职场文书
解决pytorch读取自制数据集出现过的问题
2021/05/31 Python
图片批量处理 - 尺寸、格式、水印等
2022/03/07 杂记