mirror of
https://github.com/yiisoft/yii2.git
synced 2025-11-20 16:38:22 +08:00
diff between db\ActiveQuery and redis\ActiveQuery
This commit is contained in:
@@ -12,10 +12,10 @@ namespace yii\redis;
|
||||
use yii\base\NotSupportedException;
|
||||
|
||||
/**
|
||||
* ActiveQuery represents a DB query associated with an Active Record class.
|
||||
* ActiveQuery represents a query associated with an Active Record class.
|
||||
*
|
||||
* ActiveQuery instances are usually created by [[yii\db\redis\ActiveRecord::find()]]
|
||||
* and [[yii\db\redis\ActiveRecord::count()]].
|
||||
* ActiveQuery instances are usually created by [[ActiveRecord::find()]]
|
||||
* and [[ActiveRecord::count()]].
|
||||
*
|
||||
* ActiveQuery mainly provides the following methods to retrieve the query results:
|
||||
*
|
||||
@@ -29,7 +29,7 @@ use yii\base\NotSupportedException;
|
||||
* - [[scalar()]]: returns the value of the first column in the first row of the query result.
|
||||
* - [[exists()]]: returns a value indicating whether the query result has data or not.
|
||||
*
|
||||
* You can use query methods, such as [[limit()]], [[orderBy()]] to customize the query options.
|
||||
* You can use query methods, such as [[where()]], [[limit()]] and [[orderBy()]] to customize the query options.
|
||||
*
|
||||
* ActiveQuery also provides the following additional query options:
|
||||
*
|
||||
@@ -48,6 +48,17 @@ use yii\base\NotSupportedException;
|
||||
*/
|
||||
class ActiveQuery extends \yii\base\Component
|
||||
{
|
||||
/**
|
||||
* Sort ascending
|
||||
* @see orderBy
|
||||
*/
|
||||
const SORT_ASC = false;
|
||||
/**
|
||||
* Sort descending
|
||||
* @see orderBy
|
||||
*/
|
||||
const SORT_DESC = true;
|
||||
|
||||
/**
|
||||
* @var string the name of the ActiveRecord class.
|
||||
*/
|
||||
@@ -56,13 +67,19 @@ class ActiveQuery extends \yii\base\Component
|
||||
* @var array list of relations that this query should be performed with
|
||||
*/
|
||||
public $with;
|
||||
/**
|
||||
* @var string|callable $column the name of the column by which the query results should be indexed by.
|
||||
* This can also be a callable (e.g. anonymous function) that returns the index value based on the given
|
||||
* row or model data. For more details, see [[indexBy()]].
|
||||
*/
|
||||
public $indexBy;
|
||||
/**
|
||||
* @var boolean whether to return each record as an array. If false (default), an object
|
||||
* of [[modelClass]] will be created to represent each record.
|
||||
*/
|
||||
public $asArray;
|
||||
/**
|
||||
* @var array query condition. This refers to the WHERE clause in a SQL statement.
|
||||
* @var array the query condition.
|
||||
* @see where()
|
||||
*/
|
||||
public $where;
|
||||
@@ -79,15 +96,10 @@ class ActiveQuery extends \yii\base\Component
|
||||
/**
|
||||
* @var array how to sort the query results. This is used to construct the ORDER BY clause in a SQL statement.
|
||||
* The array keys are the columns to be sorted by, and the array values are the corresponding sort directions which
|
||||
* can be either [[Query::SORT_ASC]] or [[Query::SORT_DESC]]. The array may also contain [[Expression]] objects.
|
||||
* can be either [[ActiveQuery::SORT_ASC]] or [[ActiveQuery::SORT_DESC]]. The array may also contain [[Expression]] objects.
|
||||
* If that is the case, the expressions will be converted into strings without any change.
|
||||
*/
|
||||
public $orderBy;
|
||||
/**
|
||||
* @var string the name of the column by which query results should be indexed by.
|
||||
* This is only used when the query result is returned as an array when calling [[all()]].
|
||||
*/
|
||||
public $indexBy;
|
||||
|
||||
/**
|
||||
* PHP magic method.
|
||||
@@ -125,8 +137,7 @@ class ActiveQuery extends \yii\base\Component
|
||||
}
|
||||
$rows[] = $row;
|
||||
}
|
||||
|
||||
if ($rows !== array()) {
|
||||
if (!empty($rows)) {
|
||||
$models = $this->createModels($rows);
|
||||
if (!empty($this->with)) {
|
||||
$this->populateRelations($models, $this->with);
|
||||
@@ -155,19 +166,19 @@ class ActiveQuery extends \yii\base\Component
|
||||
for($i = 0; $i < $c; ) {
|
||||
$row[$data[$i++]] = $data[$i++];
|
||||
}
|
||||
if (!$this->asArray) {
|
||||
if ($this->asArray) {
|
||||
$model = $row;
|
||||
} else {
|
||||
/** @var $class ActiveRecord */
|
||||
$class = $this->modelClass;
|
||||
$model = $class::create($row);
|
||||
if (!empty($this->with)) {
|
||||
$models = array($model);
|
||||
$this->populateRelations($models, $this->with);
|
||||
$model = $models[0];
|
||||
}
|
||||
return $model;
|
||||
} else {
|
||||
return $row;
|
||||
}
|
||||
if (!empty($this->with)) {
|
||||
$models = array($model);
|
||||
$this->populateRelations($models, $this->with);
|
||||
$model = $models[0];
|
||||
}
|
||||
return $model;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -389,6 +400,8 @@ class ActiveQuery extends \yii\base\Component
|
||||
return false;
|
||||
}
|
||||
|
||||
// TODO: refactor. code below here is all duplicated from yii/db/ActiveQuery and yii/db/Query
|
||||
|
||||
/**
|
||||
* Sets the [[asArray]] property.
|
||||
* @param boolean $value whether to return the query results in terms of arrays instead of Active Records.
|
||||
@@ -512,7 +525,19 @@ class ActiveQuery extends \yii\base\Component
|
||||
|
||||
/**
|
||||
* Sets the [[indexBy]] property.
|
||||
* @param string $column the name of the column by which the query results should be indexed by.
|
||||
* @param string|callable $column the name of the column by which the query results should be indexed by.
|
||||
* This can also be a callable (e.g. anonymous function) that returns the index value based on the given
|
||||
* row or model data. The signature of the callable should be:
|
||||
*
|
||||
* ~~~
|
||||
* // $model is an AR instance when `asArray` is false,
|
||||
* // or an array of column values when `asArray` is true.
|
||||
* function ($model)
|
||||
* {
|
||||
* // return the index value corresponding to $model
|
||||
* }
|
||||
* ~~~
|
||||
*
|
||||
* @return ActiveQuery the query object itself
|
||||
*/
|
||||
public function indexBy($column)
|
||||
@@ -633,7 +658,6 @@ class ActiveQuery extends \yii\base\Component
|
||||
return $this;
|
||||
}
|
||||
|
||||
// TODO: refactor, it is duplicated from yii/db/ActiveQuery
|
||||
private function createModels($rows)
|
||||
{
|
||||
$models = array();
|
||||
@@ -671,7 +695,6 @@ class ActiveQuery extends \yii\base\Component
|
||||
return $models;
|
||||
}
|
||||
|
||||
// TODO: refactor, it is duplicated from yii/db/ActiveQuery
|
||||
private function populateRelations(&$models, $with)
|
||||
{
|
||||
$primaryModel = new $this->modelClass;
|
||||
@@ -686,7 +709,6 @@ class ActiveQuery extends \yii\base\Component
|
||||
}
|
||||
|
||||
/**
|
||||
* TODO: refactor, it is duplicated from yii/db/ActiveQuery
|
||||
* @param ActiveRecord $model
|
||||
* @param array $with
|
||||
* @return ActiveRelation[]
|
||||
|
||||
Reference in New Issue
Block a user