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