|  |  | @ -44,10 +44,6 @@ use yii\util\StringHelper; | 
			
		
	
		
		
			
				
					
					|  |  |  | abstract class ActiveRecord extends Model |  |  |  | abstract class ActiveRecord extends Model | 
			
		
	
		
		
			
				
					
					|  |  |  | { |  |  |  | { | 
			
		
	
		
		
			
				
					
					|  |  |  | 	/** |  |  |  | 	/** | 
			
		
	
		
		
			
				
					
					|  |  |  | 	 * @var ActiveRecord[] global model instances indexed by model class names |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 	 */ |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 	private static $_models = array(); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 	/** |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 	 * @var array attribute values indexed by attribute names |  |  |  | 	 * @var array attribute values indexed by attribute names | 
			
		
	
		
		
			
				
					
					|  |  |  | 	 */ |  |  |  | 	 */ | 
			
		
	
		
		
			
				
					
					|  |  |  | 	private $_attributes = array(); |  |  |  | 	private $_attributes = array(); | 
			
		
	
	
		
		
			
				
					|  |  | @ -55,20 +51,11 @@ abstract class ActiveRecord extends Model | 
			
		
	
		
		
			
				
					
					|  |  |  | 	 * @var array old attribute values indexed by attribute names. |  |  |  | 	 * @var array old attribute values indexed by attribute names. | 
			
		
	
		
		
			
				
					
					|  |  |  | 	 */ |  |  |  | 	 */ | 
			
		
	
		
		
			
				
					
					|  |  |  | 	private $_oldAttributes; |  |  |  | 	private $_oldAttributes; | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 	/** |  |  |  | 	/** | 
			
		
	
		
		
			
				
					
					|  |  |  | 	 * Returns a model instance to support accessing non-static methods such as [[table()]], [[primaryKey()]]. |  |  |  | 	 * @var array related models indexed by the relation names | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 	 * @return ActiveRecord |  |  |  |  | 
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 	 */ |  |  |  | 	 */ | 
			
		
	
		
		
			
				
					
					|  |  |  | 	public static function model() |  |  |  | 	private $_related; | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 	{ |  |  |  | 
 | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 		$className = get_called_class(); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 		if (!isset(self::$_models[$className])) { |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 			self::$_models[$className] = new static; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 		} |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 		return self::$_models[$className]; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 	} |  |  |  |  | 
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 	/** |  |  |  | 	/** | 
			
		
	
		
		
			
				
					
					|  |  |  | 	 * Returns the database connection used by this AR class. |  |  |  | 	 * Returns the database connection used by this AR class. | 
			
		
	
	
		
		
			
				
					|  |  | @ -87,7 +74,7 @@ abstract class ActiveRecord extends Model | 
			
		
	
		
		
			
				
					
					|  |  |  | 	 * Because [[ActiveQuery]] implements a set of query building methods, |  |  |  | 	 * Because [[ActiveQuery]] implements a set of query building methods, | 
			
		
	
		
		
			
				
					
					|  |  |  | 	 * additional query conditions can be specified by calling the methods of [[ActiveQuery]]. |  |  |  | 	 * additional query conditions can be specified by calling the methods of [[ActiveQuery]]. | 
			
		
	
		
		
			
				
					
					|  |  |  | 	 * |  |  |  | 	 * | 
			
		
	
		
		
			
				
					
					|  |  |  | 	 * Below are some usage examples: |  |  |  | 	 * Below are some examples: | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 	 * |  |  |  | 	 * | 
			
		
	
		
		
			
				
					
					|  |  |  | 	 * ~~~ |  |  |  | 	 * ~~~ | 
			
		
	
		
		
			
				
					
					|  |  |  | 	 * // find all customers |  |  |  | 	 * // find all customers | 
			
		
	
	
		
		
			
				
					|  |  | @ -110,7 +97,8 @@ abstract class ActiveRecord extends Model | 
			
		
	
		
		
			
				
					
					|  |  |  | 	 * |  |  |  | 	 * | 
			
		
	
		
		
			
				
					
					|  |  |  | 	 * @param mixed $q the query parameter. This can be one of the followings: |  |  |  | 	 * @param mixed $q the query parameter. This can be one of the followings: | 
			
		
	
		
		
			
				
					
					|  |  |  | 	 * |  |  |  | 	 * | 
			
		
	
		
		
			
				
					
					|  |  |  | 	 *  - a scalar value (integer or string): query by a single primary key value. |  |  |  | 	 *  - a scalar value (integer or string): query by a single primary key value and return the | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 	 *    corresponding record. | 
			
		
	
		
		
			
				
					
					|  |  |  | 	 *  - an array of name-value pairs: it will be used to configure the [[ActiveQuery]] object. |  |  |  | 	 *  - an array of name-value pairs: it will be used to configure the [[ActiveQuery]] object. | 
			
		
	
		
		
			
				
					
					|  |  |  | 	 * |  |  |  | 	 * | 
			
		
	
		
		
			
				
					
					|  |  |  | 	 * @return ActiveQuery|ActiveRecord|null the [[ActiveQuery]] instance for query purpose, or |  |  |  | 	 * @return ActiveQuery|ActiveRecord|null the [[ActiveQuery]] instance for query purpose, or | 
			
		
	
	
		
		
			
				
					|  |  | @ -119,14 +107,14 @@ abstract class ActiveRecord extends Model | 
			
		
	
		
		
			
				
					
					|  |  |  | 	 */ |  |  |  | 	 */ | 
			
		
	
		
		
			
				
					
					|  |  |  | 	public static function find($q = null) |  |  |  | 	public static function find($q = null) | 
			
		
	
		
		
			
				
					
					|  |  |  | 	{ |  |  |  | 	{ | 
			
		
	
		
		
			
				
					
					|  |  |  | 		$query = static::createActiveQuery(); |  |  |  | 		$query = static::createQuery(); | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 		if (is_array($q)) { |  |  |  | 		if (is_array($q)) { | 
			
		
	
		
		
			
				
					
					|  |  |  | 			foreach ($q as $name => $value) { |  |  |  | 			foreach ($q as $name => $value) { | 
			
		
	
		
		
			
				
					
					|  |  |  | 				$query->$name = $value; |  |  |  | 				$query->$name = $value; | 
			
		
	
		
		
			
				
					
					|  |  |  | 			} |  |  |  | 			} | 
			
		
	
		
		
			
				
					
					|  |  |  | 		} elseif ($q !== null) { |  |  |  | 		} elseif ($q !== null) { | 
			
		
	
		
		
			
				
					
					|  |  |  | 			// query by primary key |  |  |  | 			// query by primary key | 
			
		
	
		
		
			
				
					
					|  |  |  | 			$primaryKey = static::model()->primaryKey(); |  |  |  | 			$primaryKey = static::primaryKey(); | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 			return $query->where(array($primaryKey[0] => $q))->one(); |  |  |  | 			return $query->where(array($primaryKey[0] => $q))->one(); | 
			
		
	
		
		
			
				
					
					|  |  |  | 		} |  |  |  | 		} | 
			
		
	
		
		
			
				
					
					|  |  |  | 		return $query; |  |  |  | 		return $query; | 
			
		
	
	
		
		
			
				
					|  |  | @ -143,7 +131,7 @@ abstract class ActiveRecord extends Model | 
			
		
	
		
		
			
				
					
					|  |  |  | 	 */ |  |  |  | 	 */ | 
			
		
	
		
		
			
				
					
					|  |  |  | 	public static function findBySql($sql, $params = array()) |  |  |  | 	public static function findBySql($sql, $params = array()) | 
			
		
	
		
		
			
				
					
					|  |  |  | 	{ |  |  |  | 	{ | 
			
		
	
		
		
			
				
					
					|  |  |  | 		$query = static::createActiveQuery(); |  |  |  | 		$query = static::createQuery(); | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 		$query->sql = $sql; |  |  |  | 		$query->sql = $sql; | 
			
		
	
		
		
			
				
					
					|  |  |  | 		return $query->params($params); |  |  |  | 		return $query->params($params); | 
			
		
	
		
		
			
				
					
					|  |  |  | 	} |  |  |  | 	} | 
			
		
	
	
		
		
			
				
					|  |  | @ -177,7 +165,7 @@ abstract class ActiveRecord extends Model | 
			
		
	
		
		
			
				
					
					|  |  |  | 	 */ |  |  |  | 	 */ | 
			
		
	
		
		
			
				
					
					|  |  |  | 	public static function count($q = null) |  |  |  | 	public static function count($q = null) | 
			
		
	
		
		
			
				
					
					|  |  |  | 	{ |  |  |  | 	{ | 
			
		
	
		
		
			
				
					
					|  |  |  | 		$query = static::createActiveQuery(); |  |  |  | 		$query = static::createQuery(); | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 		if (is_array($q)) { |  |  |  | 		if (is_array($q)) { | 
			
		
	
		
		
			
				
					
					|  |  |  | 			foreach ($q as $name => $value) { |  |  |  | 			foreach ($q as $name => $value) { | 
			
		
	
		
		
			
				
					
					|  |  |  | 				$query->$name = $value; |  |  |  | 				$query->$name = $value; | 
			
		
	
	
		
		
			
				
					|  |  | @ -201,7 +189,7 @@ abstract class ActiveRecord extends Model | 
			
		
	
		
		
			
				
					
					|  |  |  | 	public static function updateAll($attributes, $condition = '', $params = array()) |  |  |  | 	public static function updateAll($attributes, $condition = '', $params = array()) | 
			
		
	
		
		
			
				
					
					|  |  |  | 	{ |  |  |  | 	{ | 
			
		
	
		
		
			
				
					
					|  |  |  | 		$query = new Query; |  |  |  | 		$query = new Query; | 
			
		
	
		
		
			
				
					
					|  |  |  | 		$query->update(static::model()->tableName(), $attributes, $condition, $params); |  |  |  | 		$query->update(static::tableName(), $attributes, $condition, $params); | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 		return $query->createCommand(static::getDbConnection())->execute(); |  |  |  | 		return $query->createCommand(static::getDbConnection())->execute(); | 
			
		
	
		
		
			
				
					
					|  |  |  | 	} |  |  |  | 	} | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
	
		
		
			
				
					|  |  | @ -222,7 +210,7 @@ abstract class ActiveRecord extends Model | 
			
		
	
		
		
			
				
					
					|  |  |  | 			$counters[$name] = new Expression($value >= 0 ? "$quotedName+$value" : "$quotedName$value"); |  |  |  | 			$counters[$name] = new Expression($value >= 0 ? "$quotedName+$value" : "$quotedName$value"); | 
			
		
	
		
		
			
				
					
					|  |  |  | 		} |  |  |  | 		} | 
			
		
	
		
		
			
				
					
					|  |  |  | 		$query = new Query; |  |  |  | 		$query = new Query; | 
			
		
	
		
		
			
				
					
					|  |  |  | 		$query->update(static::model()->tableName(), $counters, $condition, $params); |  |  |  | 		$query->update(static::tableName(), $counters, $condition, $params); | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 		return $query->createCommand($db)->execute(); |  |  |  | 		return $query->createCommand($db)->execute(); | 
			
		
	
		
		
			
				
					
					|  |  |  | 	} |  |  |  | 	} | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
	
		
		
			
				
					|  |  | @ -236,7 +224,7 @@ abstract class ActiveRecord extends Model | 
			
		
	
		
		
			
				
					
					|  |  |  | 	public static function deleteAll($condition = '', $params = array()) |  |  |  | 	public static function deleteAll($condition = '', $params = array()) | 
			
		
	
		
		
			
				
					
					|  |  |  | 	{ |  |  |  | 	{ | 
			
		
	
		
		
			
				
					
					|  |  |  | 		$query = new Query; |  |  |  | 		$query = new Query; | 
			
		
	
		
		
			
				
					
					|  |  |  | 		$query->delete(static::model()->tableName(), $condition, $params); |  |  |  | 		$query->delete(static::tableName(), $condition, $params); | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 		return $query->createCommand(static::getDbConnection())->execute(); |  |  |  | 		return $query->createCommand(static::getDbConnection())->execute(); | 
			
		
	
		
		
			
				
					
					|  |  |  | 	} |  |  |  | 	} | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
	
		
		
			
				
					|  |  | @ -245,7 +233,7 @@ abstract class ActiveRecord extends Model | 
			
		
	
		
		
			
				
					
					|  |  |  | 	 * This method is called by [[find()]] and [[findBySql()]] to start a SELECT query. |  |  |  | 	 * This method is called by [[find()]] and [[findBySql()]] to start a SELECT query. | 
			
		
	
		
		
			
				
					
					|  |  |  | 	 * @return ActiveQuery the newly created [[ActiveQuery]] instance. |  |  |  | 	 * @return ActiveQuery the newly created [[ActiveQuery]] instance. | 
			
		
	
		
		
			
				
					
					|  |  |  | 	 */ |  |  |  | 	 */ | 
			
		
	
		
		
			
				
					
					|  |  |  | 	public static function createActiveQuery() |  |  |  | 	public static function createQuery() | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 	{ |  |  |  | 	{ | 
			
		
	
		
		
			
				
					
					|  |  |  | 		return new ActiveQuery(array('modelClass' => get_called_class())); |  |  |  | 		return new ActiveQuery(array('modelClass' => get_called_class())); | 
			
		
	
		
		
			
				
					
					|  |  |  | 	} |  |  |  | 	} | 
			
		
	
	
		
		
			
				
					|  |  | @ -312,6 +300,7 @@ abstract class ActiveRecord extends Model | 
			
		
	
		
		
			
				
					
					|  |  |  | 			return null; |  |  |  | 			return null; | 
			
		
	
		
		
			
				
					
					|  |  |  | 		} elseif (method_exists($this, $name)) { |  |  |  | 		} elseif (method_exists($this, $name)) { | 
			
		
	
		
		
			
				
					
					|  |  |  | 			// lazy loading related records |  |  |  | 			// lazy loading related records | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 			/** @var $query ActiveRelation */ | 
			
		
	
		
		
			
				
					
					|  |  |  | 			$query = $this->$name(); |  |  |  | 			$query = $this->$name(); | 
			
		
	
		
		
			
				
					
					|  |  |  | 			return $this->_attributes[$name] = $query->multiple ? $query->all() : $query->one(); |  |  |  | 			return $this->_attributes[$name] = $query->multiple ? $query->all() : $query->one(); | 
			
		
	
		
		
			
				
					
					|  |  |  | 		} else { |  |  |  | 		} else { | 
			
		
	
	
		
		
			
				
					|  |  | @ -465,7 +454,7 @@ abstract class ActiveRecord extends Model | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 	/** |  |  |  | 	/** | 
			
		
	
		
		
			
				
					
					|  |  |  | 	 * Returns the list of all attribute names of the model. |  |  |  | 	 * Returns the list of all attribute names of the model. | 
			
		
	
		
		
			
				
					
					|  |  |  | 	 * This would return all column names of the table associated with this AR class. |  |  |  | 	 * The default implementation will return all column names of the table associated with this AR class. | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 	 * @return array list of attribute names. |  |  |  | 	 * @return array list of attribute names. | 
			
		
	
		
		
			
				
					
					|  |  |  | 	 */ |  |  |  | 	 */ | 
			
		
	
		
		
			
				
					
					|  |  |  | 	public function attributes() |  |  |  | 	public function attributes() | 
			
		
	
	
		
		
			
				
					|  |  | @ -501,6 +490,12 @@ abstract class ActiveRecord extends Model | 
			
		
	
		
		
			
				
					
					|  |  |  | 		$this->_attributes[$name] = $value; |  |  |  | 		$this->_attributes[$name] = $value; | 
			
		
	
		
		
			
				
					
					|  |  |  | 	} |  |  |  | 	} | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 	/** | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 	 * Returns the attribute values that have been modified since they are loaded or saved most recently. | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 	 * @param string[]|null $names the names of the attributes whose values may be returned if they are | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 	 * changed recently. If null, [[attributes()]] will be used. | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 	 * @return array the changed attribute values (name-value pairs) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 	 */ | 
			
		
	
		
		
			
				
					
					|  |  |  | 	public function getChangedAttributes($names = null) |  |  |  | 	public function getChangedAttributes($names = null) | 
			
		
	
		
		
			
				
					
					|  |  |  | 	{ |  |  |  | 	{ | 
			
		
	
		
		
			
				
					
					|  |  |  | 		if ($names === null) { |  |  |  | 		if ($names === null) { | 
			
		
	
	
		
		
			
				
					|  |  | @ -904,4 +899,6 @@ abstract class ActiveRecord extends Model | 
			
		
	
		
		
			
				
					
					|  |  |  | 	{ |  |  |  | 	{ | 
			
		
	
		
		
			
				
					
					|  |  |  | 		return $this->__isset($offset); |  |  |  | 		return $this->__isset($offset); | 
			
		
	
		
		
			
				
					
					|  |  |  | 	} |  |  |  | 	} | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | } |  |  |  | } | 
			
		
	
	
		
		
			
				
					|  |  | 
 |