diff --git a/framework/db/QueryBuilder.php b/framework/db/QueryBuilder.php index 3aeb57fee3..6bc3a9ce33 100644 --- a/framework/db/QueryBuilder.php +++ b/framework/db/QueryBuilder.php @@ -101,6 +101,21 @@ class QueryBuilder extends \yii\base\Object $sql = implode($this->separator, array_filter($clauses)); $sql = $this->buildOrderByAndLimit($sql, $query->orderBy, $query->limit, $query->offset); + if (!empty($query->orderBy)) { + foreach ($query->orderBy as $expression) { + if ($expression instanceof Expression) { + $params = array_merge($params, $expression->params); + } + } + } + if (!empty($query->groupBy)) { + foreach ($query->groupBy as $expression) { + if ($expression instanceof Expression) { + $params = array_merge($params, $expression->params); + } + } + } + $union = $this->buildUnion($query->union, $params); if ($union !== '') { $sql = "($sql){$this->separator}$union"; @@ -757,10 +772,6 @@ class QueryBuilder extends \yii\base\Object foreach ($columns as $i => $column) { if ($column instanceof Expression) { $columns[$i] = $column->expression; - // TODO -// foreach ($direction->params as $n => $v) { -// $params[$n] = $v; -// } } elseif (strpos($column, '(') === false) { $columns[$i] = $this->db->quoteColumnName($column); } @@ -814,10 +825,6 @@ class QueryBuilder extends \yii\base\Object foreach ($columns as $name => $direction) { if ($direction instanceof Expression) { $orders[] = $direction->expression; - // TODO -// foreach ($direction->params as $n => $v) { -// $params[$n] = $v; -// } } else { $orders[] = $this->db->quoteColumnName($name) . ($direction === SORT_DESC ? ' DESC' : ''); } diff --git a/framework/db/sqlite/QueryBuilder.php b/framework/db/sqlite/QueryBuilder.php index 3f00e21731..ec8664f4ae 100644 --- a/framework/db/sqlite/QueryBuilder.php +++ b/framework/db/sqlite/QueryBuilder.php @@ -11,6 +11,7 @@ use yii\db\Connection; use yii\db\Exception; use yii\base\InvalidParamException; use yii\base\NotSupportedException; +use yii\db\Expression; use yii\db\Query; /** @@ -379,6 +380,21 @@ class QueryBuilder extends \yii\db\QueryBuilder $sql = implode($this->separator, array_filter($clauses)); $sql = $this->buildOrderByAndLimit($sql, $query->orderBy, $query->limit, $query->offset); + if (!empty($query->orderBy)) { + foreach ($query->orderBy as $expression) { + if ($expression instanceof Expression) { + $params = array_merge($params, $expression->params); + } + } + } + if (!empty($query->groupBy)) { + foreach ($query->groupBy as $expression) { + if ($expression instanceof Expression) { + $params = array_merge($params, $expression->params); + } + } + } + $union = $this->buildUnion($query->union, $params); if ($union !== '') { $sql = "$sql{$this->separator}$union";