$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就可以了