Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
made AR attribute manipulation behave consistent to hasAttribute()
- Loading branch information
Showing
1 changed file
with
16 additions
and
16 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -103,7 +103,7 @@ class ActiveRecord extends Model | |
/** | ||
* @var array related models indexed by the relation names | ||
*/ | ||
private $_related; | ||
private $_related = []; | ||
This comment has been minimized.
Sorry, something went wrong.
This comment has been minimized.
Sorry, something went wrong.
cebe
Author
Member
|
||
|
||
|
||
/** | ||
|
@@ -376,11 +376,11 @@ public function __get($name) | |
{ | ||
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 @@ public function __isset($name) | |
*/ | ||
public function __unset($name) | ||
{ | ||
if (isset($this->getTableSchema()->columns[$name])) { | ||
if ($this->hasAttribute($name)) { | ||
unset($this->_attributes[$name]); | ||
} else { | ||
$t = strtolower($name); | ||
|
@@ -541,6 +541,16 @@ public function attributes() | |
return array_keys($this->getTableSchema()->columns); | ||
} | ||
|
||
/** | ||
* 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, | ||
|
@@ -570,16 +580,6 @@ public function setAttribute($name, $value) | |
} | ||
} | ||
|
||
/** | ||
* 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 @@ public function getOldAttribute($name) | |
*/ | ||
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 @@ public function refresh() | |
$this->_attributes[$name] = $record->_attributes[$name]; | ||
} | ||
$this->_oldAttributes = $this->_attributes; | ||
$this->_related = null; | ||
$this->_related = []; | ||
return true; | ||
} | ||
|
||
|
The reason that
$_related
is not initialized with an array is to save memory since an array takes a lot of memory. I'm not sure if this is still the case for PHP 5.4.