mirror of
https://github.com/yiisoft/yii2.git
synced 2025-11-15 05:45:33 +08:00
Merge pull request #1560 from cebe/1545-query-reuse
make Query reuseable
This commit is contained in:
@@ -123,6 +123,9 @@ class ActiveQuery extends Query implements ActiveQueryInterface
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ($this->sql === null) {
|
if ($this->sql === null) {
|
||||||
|
$select = $this->select;
|
||||||
|
$from = $this->from;
|
||||||
|
|
||||||
if ($this->from === null) {
|
if ($this->from === null) {
|
||||||
$tableName = $modelClass::tableName();
|
$tableName = $modelClass::tableName();
|
||||||
if ($this->select === null && !empty($this->join)) {
|
if ($this->select === null && !empty($this->join)) {
|
||||||
@@ -130,8 +133,14 @@ class ActiveQuery extends Query implements ActiveQueryInterface
|
|||||||
}
|
}
|
||||||
$this->from = [$tableName];
|
$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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -190,8 +190,7 @@ class Query extends Component implements QueryInterface
|
|||||||
*/
|
*/
|
||||||
public function count($q = '*', $db = null)
|
public function count($q = '*', $db = null)
|
||||||
{
|
{
|
||||||
$this->select = ["COUNT($q)"];
|
return $this->queryScalar("COUNT($q)", $db);
|
||||||
return $this->createCommand($db)->queryScalar();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -204,8 +203,7 @@ class Query extends Component implements QueryInterface
|
|||||||
*/
|
*/
|
||||||
public function sum($q, $db = null)
|
public function sum($q, $db = null)
|
||||||
{
|
{
|
||||||
$this->select = ["SUM($q)"];
|
return $this->queryScalar("SUM($q)", $db);
|
||||||
return $this->createCommand($db)->queryScalar();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -218,8 +216,7 @@ class Query extends Component implements QueryInterface
|
|||||||
*/
|
*/
|
||||||
public function average($q, $db = null)
|
public function average($q, $db = null)
|
||||||
{
|
{
|
||||||
$this->select = ["AVG($q)"];
|
return $this->queryScalar("AVG($q)", $db);
|
||||||
return $this->createCommand($db)->queryScalar();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -232,8 +229,7 @@ class Query extends Component implements QueryInterface
|
|||||||
*/
|
*/
|
||||||
public function min($q, $db = null)
|
public function min($q, $db = null)
|
||||||
{
|
{
|
||||||
$this->select = ["MIN($q)"];
|
return $this->queryScalar("MIN($q)", $db);
|
||||||
return $this->createCommand($db)->queryScalar();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -246,8 +242,7 @@ class Query extends Component implements QueryInterface
|
|||||||
*/
|
*/
|
||||||
public function max($q, $db = null)
|
public function max($q, $db = null)
|
||||||
{
|
{
|
||||||
$this->select = ["MAX($q)"];
|
return $this->queryScalar("MAX($q)", $db);
|
||||||
return $this->createCommand($db)->queryScalar();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -258,8 +253,23 @@ class Query extends Component implements QueryInterface
|
|||||||
*/
|
*/
|
||||||
public function exists($db = null)
|
public function exists($db = null)
|
||||||
{
|
{
|
||||||
$this->select = [new Expression('1')];
|
return $this->queryScalar(new Expression('1'), $db) !== false;
|
||||||
return $this->scalar($db) !== false;
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Queries a scalar value by setting [[select]] first.
|
||||||
|
* Restores the value of select to make this query reusable.
|
||||||
|
* @param string|Expression $selectExpression
|
||||||
|
* @param Connection $db
|
||||||
|
* @return bool|string
|
||||||
|
*/
|
||||||
|
private function queryScalar($selectExpression, $db)
|
||||||
|
{
|
||||||
|
$select = $this->select;
|
||||||
|
$this->select = [$selectExpression];
|
||||||
|
$command = $this->createCommand($db);
|
||||||
|
$this->select = $select;
|
||||||
|
return $command->queryScalar();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user