From d8b94d647b5c1c365da9188d23c4545f4c0113d3 Mon Sep 17 00:00:00 2001 From: Carsten Brandt Date: Sun, 3 Nov 2013 01:45:20 +0100 Subject: [PATCH] made AR attribute manipulation behave consistent to hasAttribute() --- framework/yii/db/ActiveRecord.php | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/framework/yii/db/ActiveRecord.php b/framework/yii/db/ActiveRecord.php index 2c1689c..154d7ac 100644 --- a/framework/yii/db/ActiveRecord.php +++ b/framework/yii/db/ActiveRecord.php @@ -103,7 +103,7 @@ class ActiveRecord extends Model /** * @var array related models indexed by the relation names */ - private $_related; + private $_related = []; /** @@ -376,11 +376,11 @@ class ActiveRecord extends Model { if (isset($this->_attributes[$name]) || array_key_exists($name, $this->_attributes)) { return $this->_attributes[$name]; - } elseif (isset($this->getTableSchema()->columns[$name])) { + } elseif ($this->hasAttribute($name)) { return null; } else { $t = strtolower($name); - if (isset($this->_related[$t]) || $this->_related !== null && array_key_exists($t, $this->_related)) { + if (isset($this->_related[$t]) || array_key_exists($t, $this->_related)) { return $this->_related[$t]; } $value = parent::__get($name); @@ -430,7 +430,7 @@ class ActiveRecord extends Model */ public function __unset($name) { - if (isset($this->getTableSchema()->columns[$name])) { + if ($this->hasAttribute($name)) { unset($this->_attributes[$name]); } else { $t = strtolower($name); @@ -542,6 +542,16 @@ class ActiveRecord extends Model } /** + * Returns a value indicating whether the model has an attribute with the specified name. + * @param string $name the name of the attribute + * @return boolean whether the model has an attribute with the specified name. + */ + public function hasAttribute($name) + { + return isset($this->_attributes[$name]) || isset($this->getTableSchema()->columns[$name]); + } + + /** * Returns the named attribute value. * If this record is the result of a query and the attribute is not loaded, * null will be returned. @@ -571,16 +581,6 @@ class ActiveRecord extends Model } /** - * Returns a value indicating whether the model has an attribute with the specified name. - * @param string $name the name of the attribute - * @return boolean whether the model has an attribute with the specified name. - */ - public function hasAttribute($name) - { - return isset($this->_attributes[$name]) || isset($this->getTableSchema()->columns[$name]); - } - - /** * Returns the old attribute values. * @return array the old attribute values (name-value pairs) */ @@ -622,7 +622,7 @@ class ActiveRecord extends Model */ public function setOldAttribute($name, $value) { - if (isset($this->_oldAttributes[$name]) || isset($this->getTableSchema()->columns[$name])) { + if (isset($this->_oldAttributes[$name]) || $this->hasAttribute($name)) { $this->_oldAttributes[$name] = $value; } else { throw new InvalidParamException(get_class($this) . ' has no attribute named "' . $name . '".'); @@ -1138,7 +1138,7 @@ class ActiveRecord extends Model $this->_attributes[$name] = $record->_attributes[$name]; } $this->_oldAttributes = $this->_attributes; - $this->_related = null; + $this->_related = []; return true; }