Commit d8b94d64 by Carsten Brandt

made AR attribute manipulation behave consistent to hasAttribute()

parent be682687
...@@ -103,7 +103,7 @@ class ActiveRecord extends Model ...@@ -103,7 +103,7 @@ class ActiveRecord extends Model
/** /**
* @var array related models indexed by the relation names * @var array related models indexed by the relation names
*/ */
private $_related; private $_related = [];
/** /**
...@@ -376,11 +376,11 @@ class ActiveRecord extends Model ...@@ -376,11 +376,11 @@ class ActiveRecord extends Model
{ {
if (isset($this->_attributes[$name]) || array_key_exists($name, $this->_attributes)) { if (isset($this->_attributes[$name]) || array_key_exists($name, $this->_attributes)) {
return $this->_attributes[$name]; return $this->_attributes[$name];
} elseif (isset($this->getTableSchema()->columns[$name])) { } elseif ($this->hasAttribute($name)) {
return null; return null;
} else { } else {
$t = strtolower($name); $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]; return $this->_related[$t];
} }
$value = parent::__get($name); $value = parent::__get($name);
...@@ -430,7 +430,7 @@ class ActiveRecord extends Model ...@@ -430,7 +430,7 @@ class ActiveRecord extends Model
*/ */
public function __unset($name) public function __unset($name)
{ {
if (isset($this->getTableSchema()->columns[$name])) { if ($this->hasAttribute($name)) {
unset($this->_attributes[$name]); unset($this->_attributes[$name]);
} else { } else {
$t = strtolower($name); $t = strtolower($name);
...@@ -542,6 +542,16 @@ class ActiveRecord extends Model ...@@ -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. * Returns the named attribute value.
* If this record is the result of a query and the attribute is not loaded, * If this record is the result of a query and the attribute is not loaded,
* null will be returned. * null will be returned.
...@@ -571,16 +581,6 @@ class ActiveRecord extends Model ...@@ -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. * Returns the old attribute values.
* @return array the old attribute values (name-value pairs) * @return array the old attribute values (name-value pairs)
*/ */
...@@ -622,7 +622,7 @@ class ActiveRecord extends Model ...@@ -622,7 +622,7 @@ class ActiveRecord extends Model
*/ */
public function setOldAttribute($name, $value) 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; $this->_oldAttributes[$name] = $value;
} else { } else {
throw new InvalidParamException(get_class($this) . ' has no attribute named "' . $name . '".'); throw new InvalidParamException(get_class($this) . ' has no attribute named "' . $name . '".');
...@@ -1138,7 +1138,7 @@ class ActiveRecord extends Model ...@@ -1138,7 +1138,7 @@ class ActiveRecord extends Model
$this->_attributes[$name] = $record->_attributes[$name]; $this->_attributes[$name] = $record->_attributes[$name];
} }
$this->_oldAttributes = $this->_attributes; $this->_oldAttributes = $this->_attributes;
$this->_related = null; $this->_related = [];
return true; return true;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment