“如何转换YII2查询”;其中;从数组到字符串的条件
我有一个“如何转换YII2查询”;其中;从数组到字符串的条件,yii2,Yii2,我有一个where()方法的条件数组,可以成功地添加到查询生成器中: $condition = [ 'AND', ['archived' => 0], ['broken' => 0], ['gender' => 1], [ 'OR', ['visible' => 1], ['status' => 1], ], ]; 但在某些地方,我需要将这个数组转
where()
方法的条件数组,可以成功地添加到查询生成器中:
$condition = [
'AND',
['archived' => 0],
['broken' => 0],
['gender' => 1],
[
'OR',
['visible' => 1],
['status' => 1],
],
];
但在某些地方,我需要将这个数组转换为字符串
(`archived` = 0) AND (`broken`= 0) AND (`gender` = 1) AND (`visible` = 1 OR `status` = 1)
然后将其放置到select()
方法中,就像原始SQL语句一样
SUM(IF((`archived` = 0) AND (`broken`= 0) AND (`gender` = 1) AND (`visible` = 1 OR `status` = 1)))
您需要使用和将参数传递给主查询:
$sql = Yii::$app->db->queryBuilder->buildCondition($condition, $params);
$query
->select([
'myField' => "SUM(IF($sql, 1, 0))"
])
->addParams($params);
为什么需要它是字符串,不能使用子查询吗?如何在
SUM(IF(…)
中插入查询对象?如果查询与某个ActiveRecord
模型相关,则最好使用它的getDb()
方法而不是Yii::$app->db
以确保使用相同的连接组件。顺便说一句,我们不能将创建确定字符串放在单独的方法中。在我们获取数据的方法中,它只能一次使用