谁一开始就是大神?

andFilterWhere()函数找不出某个int类型字段为0的数据[2.0]

$query = Equip::find()->andFilterWhere(['and','is_delete',0]);

该字段的值只有0和1。数据库中页确实存在该字段值为0的数据,但是这样写提示没有找到数据,把0改成1能找出该字段值为1的数据。如果不加andFilterWhere语句,那么会正常显示所有的数据,包括is_delete字段为0的数据。

先说解决办法, 改成下面的形式 :
接下来分析 为什么会出现这么有趣的现象
is_delete = 1 可以达到预期, 不加这个条件也可以达到预期, 偏偏 is_delete = 0 有问题
原因是按照你写的那样, 最终生成的sql会是 :
select * from table where is_delete and 0 (或者1);
有意思的是, select * from table where fieldName 这样的语句并不会报错.
我试了下, fieldName 为空, 为null, 为0的时候, 查不到.
其他时候均能查到, 但是此种情况下, 不会用到索引.
为什么要andFilterWhere,直接where不行吗?
andFilterWhere这个是有为空判断的,可以看哈源码filterCondition这个方法,用andWhere就可以了

赞(0) 打赏
未经允许不得转载:菜鸟之家 » andFilterWhere()函数找不出某个int类型字段为0的数据[2.0]

评论 抢沙发

登录

找回密码

注册