mirror of
https://github.com/yiisoft/yii2.git
synced 2025-08-26 06:15:19 +08:00
...
This commit is contained in:
@ -76,16 +76,16 @@ class YiiBase
|
||||
/**
|
||||
* @var array initial property values that will be applied to objects newly created via [[createObject]].
|
||||
* The array keys are fully qualified namespaced class names, and the array values are the corresponding
|
||||
* name-value pairs for initializing the created class instances. Make sure the class names do NOT have
|
||||
* the leading backslashes. For example,
|
||||
* name-value pairs for initializing the created class instances. Please make sure class names are starting
|
||||
* with a backslash. For example,
|
||||
*
|
||||
* ~~~
|
||||
* array(
|
||||
* 'mycompany\foo\Bar' => array(
|
||||
* '\Bar' => array(
|
||||
* 'prop1' => 'value1',
|
||||
* 'prop2' => 'value2',
|
||||
* ),
|
||||
* 'mycompany\foo\Car' => array(
|
||||
* '\mycompany\foo\Car' => array(
|
||||
* 'prop1' => 'value1',
|
||||
* 'prop2' => 'value2',
|
||||
* ),
|
||||
@ -301,6 +301,9 @@ class YiiBase
|
||||
/**
|
||||
* Creates a new object using the given configuration.
|
||||
*
|
||||
* The class of the object can be any class. It does not have to
|
||||
* extend from [[Object]] or [[Component]].
|
||||
*
|
||||
* The configuration can be either a string or an array.
|
||||
* If a string, it is treated as the *object type*; if an array,
|
||||
* it must contain a `class` element specifying the *object type*, and
|
||||
@ -310,7 +313,7 @@ class YiiBase
|
||||
* The object type can be either a class name or the [[getAlias|alias]] of
|
||||
* the class. For example,
|
||||
*
|
||||
* - `\app\components\GoogleMap`: namespaced class
|
||||
* - `\app\components\GoogleMap`: full qualified namespaced class.
|
||||
* - `@app/components/GoogleMap`: an alias
|
||||
*
|
||||
* This method does the following steps to create an object:
|
||||
@ -319,7 +322,7 @@ class YiiBase
|
||||
* - if [[objectConfig]] contains the configuration for the object class,
|
||||
* it will be merged with the configuration passed to this method;
|
||||
* - initialize the object properties using the configuration passed to this method;
|
||||
* - call the `init` method of the object if it implements the [[yii\base\Initable]] interface.
|
||||
* - call the `init` method of the object if it implements the [[\yii\base\Initable]] interface.
|
||||
*
|
||||
* Below are some usage examples:
|
||||
*
|
||||
@ -337,6 +340,7 @@ class YiiBase
|
||||
* @param mixed $config the configuration. It can be either a string or an array.
|
||||
* @return mixed the created object
|
||||
* @throws \yii\base\Exception if the configuration is invalid.
|
||||
* @see \yii\base\Object::newInstance()
|
||||
*/
|
||||
public static function createObject($config)
|
||||
{
|
||||
@ -372,9 +376,9 @@ class YiiBase
|
||||
$object = $r->newInstanceArgs($args);
|
||||
}
|
||||
|
||||
$c = get_class($object);
|
||||
if (isset(\Yii::$objectConfig[$c])) {
|
||||
$config = array_merge(\Yii::$objectConfig[$c], $config);
|
||||
$class = '\\' . get_class($object);
|
||||
if (isset(\Yii::$objectConfig[$class])) {
|
||||
$config = array_merge(\Yii::$objectConfig[$class], $config);
|
||||
}
|
||||
|
||||
foreach ($config as $name => $value) {
|
||||
|
@ -461,11 +461,8 @@ class Component extends Object
|
||||
*/
|
||||
public function attachBehavior($name, $behavior)
|
||||
{
|
||||
if (!($behavior instanceof Behavior)) {
|
||||
$behavior = \Yii::createObject($behavior);
|
||||
}
|
||||
$behavior->attach($this);
|
||||
return $this->_b[$name] = $behavior;
|
||||
$this->ensureBehaviors();
|
||||
return $this->attachBehaviorInternal($name, $behavior);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -478,8 +475,9 @@ class Component extends Object
|
||||
*/
|
||||
public function attachBehaviors($behaviors)
|
||||
{
|
||||
$this->ensureBehaviors();
|
||||
foreach ($behaviors as $name => $behavior) {
|
||||
$this->attachBehavior($name, $behavior);
|
||||
$this->attachBehaviorInternal($name, $behavior);
|
||||
}
|
||||
}
|
||||
|
||||
@ -523,8 +521,23 @@ class Component extends Object
|
||||
if ($this->_b === null) {
|
||||
$this->_b = array();
|
||||
foreach ($this->behaviors() as $name => $behavior) {
|
||||
$this->attachBehavior($name, $behavior);
|
||||
$this->attachBehaviorInternal($name, $behavior);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Attaches a behavior to this component.
|
||||
* @param string $name the name of the behavior.
|
||||
* @param string|array|Behavior $behavior the behavior to be attached
|
||||
* @return Behavior the attached behavior.
|
||||
*/
|
||||
private function attachBehaviorInternal($name, $behavior)
|
||||
{
|
||||
if (!($behavior instanceof Behavior)) {
|
||||
$behavior = \Yii::createObject($behavior);
|
||||
}
|
||||
$behavior->attach($this);
|
||||
return $this->_b[$name] = $behavior;
|
||||
}
|
||||
}
|
||||
|
@ -300,8 +300,7 @@ class Object
|
||||
*/
|
||||
public static function newInstance($config = array())
|
||||
{
|
||||
$c = get_called_class();
|
||||
$class = '\\' . $c;
|
||||
$class = '\\' . get_called_class();
|
||||
|
||||
if (($n = func_num_args()-1) > 0) {
|
||||
$args = func_get_args();
|
||||
@ -321,8 +320,8 @@ class Object
|
||||
$object = $r->newInstanceArgs($args);
|
||||
}
|
||||
|
||||
if (isset(\Yii::$objectConfig[$c])) {
|
||||
$config = array_merge(\Yii::$objectConfig[$c], $config);
|
||||
if (isset(\Yii::$objectConfig[$class])) {
|
||||
$config = array_merge(\Yii::$objectConfig[$class], $config);
|
||||
}
|
||||
|
||||
foreach ($config as $name => $value) {
|
||||
|
@ -10,6 +10,9 @@
|
||||
|
||||
namespace yii\db\ar;
|
||||
|
||||
use yii\db\dao\BaseQuery;
|
||||
use yii\base\VectorIterator;
|
||||
|
||||
/**
|
||||
* ActiveFinder.php is ...
|
||||
* todo: add SQL monitor
|
||||
@ -17,18 +20,18 @@ namespace yii\db\ar;
|
||||
* @author Qiang Xue <qiang.xue@gmail.com>
|
||||
* @since 2.0
|
||||
*/
|
||||
class ActiveQuery extends \yii\db\dao\BaseQuery implements \IteratorAggregate, \ArrayAccess, \Countable
|
||||
class ActiveQuery extends BaseQuery implements \IteratorAggregate, \ArrayAccess, \Countable
|
||||
{
|
||||
public $modelClass;
|
||||
|
||||
public $with;
|
||||
public $alias;
|
||||
public $index;
|
||||
public $indexBy;
|
||||
public $asArray;
|
||||
|
||||
private $_count;
|
||||
private $_sql;
|
||||
private $_countSql;
|
||||
private $_asArray;
|
||||
private $_records;
|
||||
|
||||
public function all()
|
||||
@ -51,7 +54,26 @@ class ActiveQuery extends \yii\db\dao\BaseQuery implements \IteratorAggregate, \
|
||||
|
||||
public function asArray($value = true)
|
||||
{
|
||||
$this->_asArray = $value;
|
||||
$this->asArray = $value;
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function with()
|
||||
{
|
||||
$this->with = func_get_args();
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function indexBy($column)
|
||||
{
|
||||
$this->indexBy = $column;
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function alias($tableAlias)
|
||||
{
|
||||
$this->alias = $tableAlias;
|
||||
return $this;
|
||||
}
|
||||
|
||||
protected function performQuery()
|
||||
@ -74,10 +96,6 @@ class ActiveQuery extends \yii\db\dao\BaseQuery implements \IteratorAggregate, \
|
||||
return $records;
|
||||
}
|
||||
|
||||
public function with()
|
||||
{
|
||||
|
||||
}
|
||||
//
|
||||
// public function getSql($connection = null)
|
||||
// {
|
||||
@ -150,7 +168,7 @@ class ActiveQuery extends \yii\db\dao\BaseQuery implements \IteratorAggregate, \
|
||||
public function getIterator()
|
||||
{
|
||||
$records = $this->performQuery();
|
||||
return new \yii\base\VectorIterator($records);
|
||||
return new VectorIterator($records);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -11,12 +11,12 @@
|
||||
namespace yii\db\dao;
|
||||
|
||||
/**
|
||||
* Query represents a SQL statement in a way that is independent of DBMS.
|
||||
* BaseQuery represents a SQL statement in a way that is independent of DBMS.
|
||||
*
|
||||
* Query not only can represent a SELECT statement, it can also represent INSERT, UPDATE, DELETE,
|
||||
* BaseQuery not only can represent a SELECT statement, it can also represent INSERT, UPDATE, DELETE,
|
||||
* and other commonly used DDL statements, such as CREATE TABLE, CREATE INDEX, etc.
|
||||
*
|
||||
* Query provides a set of methods to facilitate the specification of different clauses.
|
||||
* BaseQuery provides a set of methods to facilitate the specification of different clauses.
|
||||
* These methods can be chained together. For example,
|
||||
*
|
||||
* ~~~
|
||||
@ -120,19 +120,28 @@ class BaseQuery extends \yii\base\Object
|
||||
* Columns can contain table prefixes (e.g. "tbl_user.id") and/or column aliases (e.g. "tbl_user.id AS user_id").
|
||||
* The method will automatically quote the column names unless a column contains some parenthesis
|
||||
* (which means the column contains a DB expression).
|
||||
* @param boolean $distinct whether to use 'SELECT DISTINCT'.
|
||||
* @param string $option additional option that should be appended to the 'SELECT' keyword. For example,
|
||||
* in MySQL, the option 'SQL_CALC_FOUND_ROWS' can be used.
|
||||
* @return Query the query object itself
|
||||
* @return BaseQuery the query object itself
|
||||
*/
|
||||
public function select($columns = '*', $distinct = false, $option = '')
|
||||
public function select($columns = '*', $option = '')
|
||||
{
|
||||
$this->select = $columns;
|
||||
$this->distinct = $distinct;
|
||||
$this->selectOption = $option;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the value indicating whether to SELECT DISTINCT or not.
|
||||
* @param bool $value whether to SELECT DISTINCT or not.
|
||||
* @return BaseQuery the query object itself
|
||||
*/
|
||||
public function distinct($value = true)
|
||||
{
|
||||
$this->distinct = $value;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the FROM part of the query.
|
||||
* @param mixed $tables the table(s) to be selected from. This can be either a string (e.g. 'tbl_user')
|
||||
@ -140,7 +149,7 @@ class BaseQuery extends \yii\base\Object
|
||||
* Table names can contain schema prefixes (e.g. 'public.tbl_user') and/or table aliases (e.g. 'tbl_user u').
|
||||
* The method will automatically quote the table names unless it contains some parenthesis
|
||||
* (which means the table is given as a sub-query or DB expression).
|
||||
* @return Query the query object itself
|
||||
* @return BaseQuery the query object itself
|
||||
*/
|
||||
public function from($tables)
|
||||
{
|
||||
@ -215,7 +224,7 @@ class BaseQuery extends \yii\base\Object
|
||||
* @param array $params the parameters (name=>value) to be bound to the query.
|
||||
* For anonymous parameters, they can alternatively be specified as separate parameters to this method.
|
||||
* For example, `where('type=? AND status=?', 100, 1)`.
|
||||
* @return Query the query object itself
|
||||
* @return BaseQuery the query object itself
|
||||
* @see andWhere()
|
||||
* @see orWhere()
|
||||
*/
|
||||
@ -237,7 +246,7 @@ class BaseQuery extends \yii\base\Object
|
||||
* on how to specify this parameter.
|
||||
* @param array $params the parameters (name=>value) to be bound to the query.
|
||||
* Please refer to [[where()]] on alternative syntax of specifying anonymous parameters.
|
||||
* @return Query the query object itself
|
||||
* @return BaseQuery the query object itself
|
||||
* @see where()
|
||||
* @see orWhere()
|
||||
*/
|
||||
@ -263,7 +272,7 @@ class BaseQuery extends \yii\base\Object
|
||||
* on how to specify this parameter.
|
||||
* @param array $params the parameters (name=>value) to be bound to the query.
|
||||
* Please refer to [[where()]] on alternative syntax of specifying anonymous parameters.
|
||||
* @return Query the query object itself
|
||||
* @return BaseQuery the query object itself
|
||||
* @see where()
|
||||
* @see andWhere()
|
||||
*/
|
||||
@ -292,7 +301,7 @@ class BaseQuery extends \yii\base\Object
|
||||
* Please refer to [[where()]] on how to specify this parameter.
|
||||
* @param array $params the parameters (name=>value) to be bound to the query.
|
||||
* Please refer to [[where()]] on alternative syntax of specifying anonymous parameters.
|
||||
* @return Query the query object itself
|
||||
* @return BaseQuery the query object itself
|
||||
*/
|
||||
public function join($table, $condition, $params = array())
|
||||
{
|
||||
@ -314,7 +323,7 @@ class BaseQuery extends \yii\base\Object
|
||||
* @param string|array $condition the join condition that should appear in the ON part.
|
||||
* Please refer to [[where()]] on how to specify this parameter.
|
||||
* @param array $params the parameters (name=>value) to be bound to the query
|
||||
* @return Query the query object itself
|
||||
* @return BaseQuery the query object itself
|
||||
*/
|
||||
public function leftJoin($table, $condition, $params = array())
|
||||
{
|
||||
@ -336,7 +345,7 @@ class BaseQuery extends \yii\base\Object
|
||||
* @param string|array $condition the join condition that should appear in the ON part.
|
||||
* Please refer to [[where()]] on how to specify this parameter.
|
||||
* @param array $params the parameters (name=>value) to be bound to the query
|
||||
* @return Query the query object itself
|
||||
* @return BaseQuery the query object itself
|
||||
*/
|
||||
public function rightJoin($table, $condition, $params = array())
|
||||
{
|
||||
@ -356,7 +365,7 @@ class BaseQuery extends \yii\base\Object
|
||||
* Table name can contain schema prefix (e.g. 'public.tbl_user') and/or table alias (e.g. 'tbl_user u').
|
||||
* The method will automatically quote the table name unless it contains some parenthesis
|
||||
* (which means the table is given as a sub-query or DB expression).
|
||||
* @return Query the query object itself
|
||||
* @return BaseQuery the query object itself
|
||||
*/
|
||||
public function crossJoin($table)
|
||||
{
|
||||
@ -371,7 +380,7 @@ class BaseQuery extends \yii\base\Object
|
||||
* Table name can contain schema prefix (e.g. 'public.tbl_user') and/or table alias (e.g. 'tbl_user u').
|
||||
* The method will automatically quote the table name unless it contains some parenthesis
|
||||
* (which means the table is given as a sub-query or DB expression).
|
||||
* @return Query the query object itself
|
||||
* @return BaseQuery the query object itself
|
||||
*/
|
||||
public function naturalJoin($table)
|
||||
{
|
||||
@ -385,7 +394,7 @@ class BaseQuery extends \yii\base\Object
|
||||
* Columns can be specified in either a string (e.g. "id, name") or an array (e.g. array('id', 'name')).
|
||||
* The method will automatically quote the column names unless a column contains some parenthesis
|
||||
* (which means the column contains a DB expression).
|
||||
* @return Query the query object itself
|
||||
* @return BaseQuery the query object itself
|
||||
* @see addGroupBy()
|
||||
*/
|
||||
public function groupBy($columns)
|
||||
@ -400,7 +409,7 @@ class BaseQuery extends \yii\base\Object
|
||||
* Columns can be specified in either a string (e.g. "id, name") or an array (e.g. array('id', 'name')).
|
||||
* The method will automatically quote the column names unless a column contains some parenthesis
|
||||
* (which means the column contains a DB expression).
|
||||
* @return Query the query object itself
|
||||
* @return BaseQuery the query object itself
|
||||
* @see groupBy()
|
||||
*/
|
||||
public function addGroupBy($columns)
|
||||
@ -425,7 +434,7 @@ class BaseQuery extends \yii\base\Object
|
||||
* Please refer to [[where()]] on how to specify this parameter.
|
||||
* @param array $params the parameters (name=>value) to be bound to the query.
|
||||
* Please refer to [[where()]] on alternative syntax of specifying anonymous parameters.
|
||||
* @return Query the query object itself
|
||||
* @return BaseQuery the query object itself
|
||||
* @see andHaving()
|
||||
* @see orHaving()
|
||||
*/
|
||||
@ -447,7 +456,7 @@ class BaseQuery extends \yii\base\Object
|
||||
* on how to specify this parameter.
|
||||
* @param array $params the parameters (name=>value) to be bound to the query.
|
||||
* Please refer to [[where()]] on alternative syntax of specifying anonymous parameters.
|
||||
* @return Query the query object itself
|
||||
* @return BaseQuery the query object itself
|
||||
* @see having()
|
||||
* @see orHaving()
|
||||
*/
|
||||
@ -473,7 +482,7 @@ class BaseQuery extends \yii\base\Object
|
||||
* on how to specify this parameter.
|
||||
* @param array $params the parameters (name=>value) to be bound to the query.
|
||||
* Please refer to [[where()]] on alternative syntax of specifying anonymous parameters.
|
||||
* @return Query the query object itself
|
||||
* @return BaseQuery the query object itself
|
||||
* @see having()
|
||||
* @see andHaving()
|
||||
*/
|
||||
@ -498,7 +507,7 @@ class BaseQuery extends \yii\base\Object
|
||||
* Columns can be specified in either a string (e.g. "id ASC, name DESC") or an array (e.g. array('id ASC', 'name DESC')).
|
||||
* The method will automatically quote the column names unless a column contains some parenthesis
|
||||
* (which means the column contains a DB expression).
|
||||
* @return Query the query object itself
|
||||
* @return BaseQuery the query object itself
|
||||
* @see addOrderBy()
|
||||
*/
|
||||
public function orderBy($columns)
|
||||
@ -513,7 +522,7 @@ class BaseQuery extends \yii\base\Object
|
||||
* Columns can be specified in either a string (e.g. "id ASC, name DESC") or an array (e.g. array('id ASC', 'name DESC')).
|
||||
* The method will automatically quote the column names unless a column contains some parenthesis
|
||||
* (which means the column contains a DB expression).
|
||||
* @return Query the query object itself
|
||||
* @return BaseQuery the query object itself
|
||||
* @see orderBy()
|
||||
*/
|
||||
public function addOrderBy($columns)
|
||||
@ -535,7 +544,7 @@ class BaseQuery extends \yii\base\Object
|
||||
/**
|
||||
* Sets the LIMIT part of the query.
|
||||
* @param integer $limit the limit
|
||||
* @return Query the query object itself
|
||||
* @return BaseQuery the query object itself
|
||||
*/
|
||||
public function limit($limit)
|
||||
{
|
||||
@ -546,7 +555,7 @@ class BaseQuery extends \yii\base\Object
|
||||
/**
|
||||
* Sets the OFFSET part of the query.
|
||||
* @param integer $offset the offset
|
||||
* @return Query the query object itself
|
||||
* @return BaseQuery the query object itself
|
||||
*/
|
||||
public function offset($offset)
|
||||
{
|
||||
@ -557,7 +566,7 @@ class BaseQuery extends \yii\base\Object
|
||||
/**
|
||||
* Appends a SQL statement using UNION operator.
|
||||
* @param string $sql the SQL statement to be appended using UNION
|
||||
* @return Query the query object itself
|
||||
* @return BaseQuery the query object itself
|
||||
*/
|
||||
public function union($sql)
|
||||
{
|
||||
@ -570,7 +579,7 @@ class BaseQuery extends \yii\base\Object
|
||||
* @param array list of query parameter values indexed by parameter placeholders.
|
||||
* For example, `array(':name'=>'Dan', ':age'=>31)`.
|
||||
* Please refer to [[where()]] on alternative syntax of specifying anonymous parameters.
|
||||
* @return Query the query object itself
|
||||
* @return BaseQuery the query object itself
|
||||
* @see addParams()
|
||||
*/
|
||||
public function params($params)
|
||||
@ -584,7 +593,7 @@ class BaseQuery extends \yii\base\Object
|
||||
* @param array list of query parameter values indexed by parameter placeholders.
|
||||
* For example, `array(':name'=>'Dan', ':age'=>31)`.
|
||||
* Please refer to [[where()]] on alternative syntax of specifying anonymous parameters.
|
||||
* @return Query the query object itself
|
||||
* @return BaseQuery the query object itself
|
||||
* @see params()
|
||||
*/
|
||||
public function addParams($params)
|
||||
@ -703,7 +712,7 @@ class BaseQuery extends \yii\base\Object
|
||||
|
||||
/**
|
||||
* Resets the query object to its original state.
|
||||
* @return Query the query object itself
|
||||
* @return BaseQuery the query object itself
|
||||
*/
|
||||
public function reset()
|
||||
{
|
||||
|
@ -43,7 +43,7 @@ class Query extends BaseQuery
|
||||
{
|
||||
/**
|
||||
* @var array the operation that this query represents. This refers to the method call as well as
|
||||
* the corresponding parameters for constructing a non-query SQL statement (e.g. INSERT, CREATE TABLE).
|
||||
* the corresponding parameters for constructing a non-select SQL statement (e.g. INSERT, CREATE TABLE).
|
||||
* This property is mainly maintained by methods such as [[insert()]], [[update()]], [[createTable()]].
|
||||
* If this property is not set, it means this query represents a SELECT statement.
|
||||
*/
|
||||
|
@ -31,6 +31,9 @@ Upgrading from v1.1.x
|
||||
- The root alias `@yii` now represents the framework installation directory.
|
||||
In 1.x, this is named as `system`. We also removed `zii` root alias.
|
||||
|
||||
- Object serves as the base class that supports properties. And Component extends
|
||||
from Object and supports events and behaviors. Behaviors declared in
|
||||
Component::behaviors() are attached on demand.
|
||||
|
||||
- `CList` is renamed to `Vector`, and `CMap` is renamed to `Dictionary`.
|
||||
Other collection classes are dropped in favor of SPL classes.
|
||||
|
Reference in New Issue
Block a user