diff --git a/framework/yii/db/ActiveQuery.php b/framework/yii/db/ActiveQuery.php index 52dbcdb..e93e9be 100644 --- a/framework/yii/db/ActiveQuery.php +++ b/framework/yii/db/ActiveQuery.php @@ -123,6 +123,9 @@ class ActiveQuery extends Query implements ActiveQueryInterface } if ($this->sql === null) { + $select = $this->select; + $from = $this->from; + if ($this->from === null) { $tableName = $modelClass::tableName(); if ($this->select === null && !empty($this->join)) { @@ -130,8 +133,14 @@ class ActiveQuery extends Query implements ActiveQueryInterface } $this->from = [$tableName]; } - list ($this->sql, $this->params) = $db->getQueryBuilder()->build($this); + list ($sql, $params) = $db->getQueryBuilder()->build($this); + + $this->select = $select; + $this->from = $from; + } else { + $sql = $this->sql; + $params = $this->params; } - return $db->createCommand($this->sql, $this->params); + return $db->createCommand($sql, $params); } } diff --git a/framework/yii/db/Query.php b/framework/yii/db/Query.php index 301b2e1..fb1d42f 100644 --- a/framework/yii/db/Query.php +++ b/framework/yii/db/Query.php @@ -190,8 +190,11 @@ class Query extends Component implements QueryInterface */ public function count($q = '*', $db = null) { + $select = $this->select; $this->select = ["COUNT($q)"]; - return $this->createCommand($db)->queryScalar(); + $command = $this->createCommand($db); + $this->select = $select; + return $command->queryScalar(); } /** @@ -204,8 +207,11 @@ class Query extends Component implements QueryInterface */ public function sum($q, $db = null) { + $select = $this->select; $this->select = ["SUM($q)"]; - return $this->createCommand($db)->queryScalar(); + $command = $this->createCommand($db); + $this->select = $select; + return $command->queryScalar(); } /** @@ -218,8 +224,11 @@ class Query extends Component implements QueryInterface */ public function average($q, $db = null) { + $select = $this->select; $this->select = ["AVG($q)"]; - return $this->createCommand($db)->queryScalar(); + $command = $this->createCommand($db); + $this->select = $select; + return $command->queryScalar(); } /** @@ -232,8 +241,11 @@ class Query extends Component implements QueryInterface */ public function min($q, $db = null) { + $select = $this->select; $this->select = ["MIN($q)"]; - return $this->createCommand($db)->queryScalar(); + $command = $this->createCommand($db); + $this->select = $select; + return $command->queryScalar(); } /** @@ -246,8 +258,11 @@ class Query extends Component implements QueryInterface */ public function max($q, $db = null) { + $select = $this->select; $this->select = ["MAX($q)"]; - return $this->createCommand($db)->queryScalar(); + $command = $this->createCommand($db); + $this->select = $select; + return $command->queryScalar(); } /** @@ -258,8 +273,11 @@ class Query extends Component implements QueryInterface */ public function exists($db = null) { + $select = $this->select; $this->select = [new Expression('1')]; - return $this->scalar($db) !== false; + $command = $this->createCommand($db); + $this->select = $select; + return $command->queryScalar() !== false; } /**