Yii框架where查询用法实例分析
本文实例讲述了Yii框架where查询用法。分享给大家供大家参考,具体如下:
1.简述
Yii的查询操作找使用where用的很多总结下常用的哈希格式与操作符格式
2.操作符格式
适用于操作符的
[操作符,操作数1,操作数2,...]
['LIKE','nickname','%'.strtr($mix_kw,['%'=>'\%','_'=>'\_','\\'=>'\\\\']).'%',false];
- and:操作数会被AND关键字串联起来。例如,['and','id=1','id=2']将会生成id=1ANDid=2。如果操作数是一个数组,它也会按上述规则转换成字符串。例如,['and','type=1',['or','id=1','id=2']]将会生成type=1AND(id=1ORid=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]将会生成idBETWEEN1AND10。如果你需要建立一个值在两列之间的查询条件(比如11BETWEENmin_idANDmax_id),你应该使用BetweenColumnsCondition。请参阅条件-对象格式一章以了解有关条件的对象定义的更多信息。
- notbetween:与between类似,除了BETWEEN被NOTBETWEEN替换在生成条件时。
in:第一个操作数应为字段名称或者DB表达式。第二个操作符既可以是一个数组,也可以是一个Query对象。它会转换成IN条件语句。如果第二个操作数是一个数组,那么它代表的是字段或DB表达式的取值范围。如果第二个操作数是Query对象,那么这个子查询的结果集将会作为第一个操作符的字段或者DB表达式的取值范围。例如,['in','id',[1,2,3]]将生成idIN(1,2,3)。该方法将正确地为字段名加引号以及为取值范围转义。in操作符还支持组合字段,此时,操作数1应该是一个字段名数组,而操作数2应该是一个数组或者Query对象,代表这些字段的取值范围。
- notin:用法和in操作符类似,这里就不再赘述。
- like:
第一个操作数应为一个字段名称或DB表达式,
第二个操作数可以使字符串或数组,代表第一个操作数需要模糊查询的值。比如,['like','name','tester']会生成nameLIKE'%tester%'。如果范围值是一个数组,那么将会生成用AND串联起来的多个like语句。例如,['like','name',['test','sample']]将会生成nameLIKE'%test%'ANDnameLIKE'%sample%'。
第三个可选的操作数来指定应该如何转义数值当中的特殊字符。该操作数是一个从需要被转义的特殊字符到转义副本的数组映射。如果没有提供这个操作数,将会使用默认的转义映射。如果需要禁用转义的功能,只需要将参数设置为false或者传入一个空数组即可。需要注意的是,当使用转义映射(又或者没有提供第三个操作数的时候),第二个操作数的值的前后将会被加上百分号。
- orlike:用法和like操作符类似,区别在于当第二个操作数为数组时,会使用OR来串联多个LIKE条件语句。
- notlike:用法和like操作符类似,区别在于会使用NOTLIKE来生成条件语句。
- ornotlike:用法和notlike操作符类似,区别在于会使用OR来串联多个NOTLIKE条件语句。
- exists:需要一个操作数,该操作数必须是代表子查询yii\db\Query的一个实例,它将会构建一个EXISTS(sub-query)表达式。
- notexists:用法和exists操作符类似,它将创建一个NOTEXISTS(sub-query)表达式。
>,<=或者其他包含两个操作数的合法DB操作符:第一个操作数必须为字段的名称,而第二个操作数则应为一个值。例如,['>','age',10]将会生成age>10。
3.哈希格式
适用于简单的查询的
它是以数组的形式来书写的,数组的键表示字段的名称,而数组的值则表示这个字段需要匹配的值。例如:
//...WHERE(`status`=10)AND(`type`ISNULL)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()唯一的不同就在于,前者将忽略在条件当中的hashformat的空值。所以如果$email为空而$username不为空,那么上面的代码最终将生产如下SQL...WHEREusername=:username。
提示:当一个值为null、空数组、空字符串或者一个只包含空格的字符串时,那么它将被判定为空值。
更多关于Yii相关内容感兴趣的读者可查看本站专题:《Yii框架入门及常用技巧总结》、《php优秀开发框架总结》、《smarty模板入门基础教程》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。