- 当yii查询的条件变多的时候,where的写法会变化,比如查询分数在0,30之间,并且is_delete=0,id=$id的。
如果像下面这样写,就达不到想要的结果
//该方法不可用
$where = []; $where['desc_id'] = $id; $where['is_delete'] = 0; //下面的$where 数组重新赋值了,就会把上面的where条件覆盖掉。条件变少了,查询结果会变化 $where = [ 'and', ['<=', 'minscore', $score], ['>=', 'maxscore', $score], ];这个时候可能会想到改变一下顺序是否能够达到目的呢?比如下面这样:
//该方法不可用
$where = [ 'and', ['<=', 'minscore', $score], ['>=', 'maxscore', $score], //达不到目的,舍弃 ]; $where['desc_id'] = $id; $where['is_delete'] = 0;经测试发现,这种根本不行,那只能换一种实现方式了。使用下面的方法
//andWhere 或者 orWhere $where = [ 'and', ['<=', 'minscore', $score], ['>=', 'maxscore', $score], ]; $andwhere['desc_id'] = $id; $andwhere['is_delete'] = 0; $assessment = PsychologicalAssessment::find() ->select('id, title, content') ->where($where) ->andWhere($andwhere) ->one();
- yii like 单边加%,目的是使用索引
$where = [ 'and', ['like', 'name', $name.'%', false], ];