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学习之正则表达式
Apr 17 PHP
PHP中copy on write写时复制机制介绍
May 13 PHP
访问编码后的中文URL返回404错误的解决方法
Aug 20 PHP
PHP 魔术变量和魔术函数详解
Feb 25 PHP
PHP日期函数date格式化UNIX时间的方法
Mar 19 PHP
PHP会话处理的10个函数
Aug 11 PHP
JSON用法之将PHP数组转JS数组,JS如何接收PHP数组
Oct 08 PHP
Yii清理缓存的方法
Jan 06 PHP
CI映射(加载)数据到view层的方法
Mar 28 PHP
PHP实现图片压缩
Sep 09 PHP
laravel框架数据库操作、查询构建器、Eloquent ORM操作实例分析
Dec 20 PHP
搭建PhpStorm+PhpStudy开发环境的超详细教程
Sep 17 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
php数组总结篇(一)
2008/09/30 PHP
PHP实现大数(浮点数)取余的方法
2017/02/18 PHP
用window.location.href实现刷新另个框架页面
2007/03/07 Javascript
优化 JavaScript 代码的方法小结
2009/07/16 Javascript
Safari5中alert的无限循环BUG
2011/04/07 Javascript
JS获取页面窗口大小的代码解读
2011/12/01 Javascript
JavaSciprt中处理字符串之sup()方法的使用教程
2015/06/08 Javascript
jQuery实现鼠标经过购物车出现下拉框代码(推荐)
2016/07/21 Javascript
AngularJs IE Compatibility 兼容老版本IE
2016/09/01 Javascript
touch.js 拖动、缩放、旋转 (鼠标手势)功能代码
2017/02/04 Javascript
在Vue中用canvas实现二维码和图片合成海报的方法
2019/06/10 Javascript
谈谈IntersectionObserver懒加载的具体使用
2019/10/15 Javascript
python使用pil生成图片验证码的方法
2015/05/08 Python
使用Python3编写抓取网页和只抓网页图片的脚本
2015/08/20 Python
对numpy中轴与维度的理解
2018/04/18 Python
Python获取对象属性的几种方式小结
2020/03/12 Python
Django数据结果集序列化并展示实现过程
2020/04/22 Python
Python如何使用PIL Image制作GIF图片
2020/05/16 Python
Keras 数据增强ImageDataGenerator多输入多输出实例
2020/07/03 Python
降低python版本的操作方法
2020/09/11 Python
解决canvas转base64/jpeg时透明区域变成黑色背景的方法
2016/10/23 HTML / CSS
美国专营婴幼儿用品的购物网站:buybuy BABY
2017/01/01 全球购物
美国咖啡批发网站:Coffee.org
2017/06/29 全球购物
Tiqets荷兰:出售欧洲最美丽的景点和博物馆门票
2018/01/09 全球购物
意大利中国电子产品购物网站:Geekmall.com
2019/09/30 全球购物
新闻记者个人求职的自我评价
2013/11/28 职场文书
优秀士兵个人事迹材料
2014/01/19 职场文书
如何写自我评价?自我评价写什么好?
2014/03/14 职场文书
公司爱心捐款倡议书
2014/05/14 职场文书
工作收入住址证明
2014/10/28 职场文书
党的群众路线教育实践活动个人对照检查材料(校长)
2014/11/05 职场文书
介绍长城的导游词
2015/01/30 职场文书
异地恋情人节寄语
2015/02/28 职场文书
浙江省杭州市平均工资标准是多少?
2019/07/09 职场文书
python3使用diagrams绘制架构图的步骤
2021/04/08 Python
解决SpringCloud Feign传对象参数调用失败的问题
2021/06/23 Java/Android