andFilterWhere()函数找不出某个int类型字段为0的数据 [ 2.0 版本 ]
$query = Equip::find()->andFilterWhere(['and','is_delete',0]);
该字段的值只有0和1。数据库中页确实存在该字段值为0的数据,但是这样写提示没有找到数据,把0改成1能找出该字段值为1的数据。如果不加andFilterWhere语句,那么会正常显示所有的数据,包括is_delete字段为0的数据。
最佳答案
-
先说解决办法, 改成下面的形式 :
$query = Equip::find()->andFilterWhere(['is_delete' => 0]); 或者 $query = Equip::find()->andFilterWhere(['and', ['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的时候, 查不到.其他时候均能查到, 但是此种情况下, 不会用到索引.
共 2 条回复luoxiao 觉得很赞
其他 2 个回答
Bearox
注册时间:2015-12-05
最后登录:2016-04-08
在线时长:0小时50分
最后登录:2016-04-08
在线时长:0小时50分
- 粉丝0
- 金钱20
- 威望0
- 积分20