|
|
|
@ -379,13 +379,12 @@ class ActiveRecord extends Model
|
|
|
|
|
} elseif ($this->hasAttribute($name)) { |
|
|
|
|
return null; |
|
|
|
|
} else { |
|
|
|
|
$t = strtolower($name); |
|
|
|
|
if (isset($this->_related[$t]) || array_key_exists($t, $this->_related)) { |
|
|
|
|
return $this->_related[$t]; |
|
|
|
|
if (isset($this->_related[$name]) || array_key_exists($name, $this->_related)) { |
|
|
|
|
return $this->_related[$name]; |
|
|
|
|
} |
|
|
|
|
$value = parent::__get($name); |
|
|
|
|
if ($value instanceof ActiveRelation) { |
|
|
|
|
return $this->_related[$t] = $value->multiple ? $value->all() : $value->one(); |
|
|
|
|
return $this->_related[$name] = $value->multiple ? $value->all() : $value->one(); |
|
|
|
|
} else { |
|
|
|
|
return $value; |
|
|
|
|
} |
|
|
|
@ -433,9 +432,8 @@ class ActiveRecord extends Model
|
|
|
|
|
if ($this->hasAttribute($name)) { |
|
|
|
|
unset($this->_attributes[$name]); |
|
|
|
|
} else { |
|
|
|
|
$t = strtolower($name); |
|
|
|
|
if (isset($this->_related[$t])) { |
|
|
|
|
unset($this->_related[$t]); |
|
|
|
|
if (isset($this->_related[$name])) { |
|
|
|
|
unset($this->_related[$name]); |
|
|
|
|
} else { |
|
|
|
|
parent::__unset($name); |
|
|
|
|
} |
|
|
|
@ -523,12 +521,31 @@ class ActiveRecord extends Model
|
|
|
|
|
/** |
|
|
|
|
* Populates the named relation with the related records. |
|
|
|
|
* Note that this method does not check if the relation exists or not. |
|
|
|
|
* @param string $name the relation name (case-insensitive) |
|
|
|
|
* @param string $name the relation name (case-sensitive) |
|
|
|
|
* @param ActiveRecord|array|null the related records to be populated into the relation. |
|
|
|
|
*/ |
|
|
|
|
public function populateRelation($name, $records) |
|
|
|
|
{ |
|
|
|
|
$this->_related[strtolower($name)] = $records; |
|
|
|
|
$this->_related[$name] = $records; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Check whether the named relation has been populated with records. |
|
|
|
|
* @param string $name the relation name (case-sensitive) |
|
|
|
|
* @return bool whether relation has been populated with records. |
|
|
|
|
*/ |
|
|
|
|
public function isRelationPopulated($name) |
|
|
|
|
{ |
|
|
|
|
return array_key_exists($name, $this->_related); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Returns all populated relations. |
|
|
|
|
* @return array an array of relation data indexed by relation names. |
|
|
|
|
*/ |
|
|
|
|
public function getPopulatedRelations() |
|
|
|
|
{ |
|
|
|
|
return $this->_related; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
@ -1286,7 +1303,7 @@ class ActiveRecord extends Model
|
|
|
|
|
* |
|
|
|
|
* Note that this method requires that the primary key value is not null. |
|
|
|
|
* |
|
|
|
|
* @param string $name the name of the relationship |
|
|
|
|
* @param string $name the case sensitive name of the relationship |
|
|
|
|
* @param ActiveRecord $model the model to be linked with the current one. |
|
|
|
|
* @param array $extraColumns additional column values to be saved into the pivot table. |
|
|
|
|
* This parameter is only meaningful for a relationship involving a pivot table |
|
|
|
@ -1308,7 +1325,7 @@ class ActiveRecord extends Model
|
|
|
|
|
$viaClass = $viaRelation->modelClass; |
|
|
|
|
$viaTable = $viaClass::tableName(); |
|
|
|
|
// unset $viaName so that it can be reloaded to reflect the change |
|
|
|
|
unset($this->_related[strtolower($viaName)]); |
|
|
|
|
unset($this->_related[$viaName]); |
|
|
|
|
} else { |
|
|
|
|
$viaRelation = $relation->via; |
|
|
|
|
$viaTable = reset($relation->via->from); |
|
|
|
@ -1364,7 +1381,7 @@ class ActiveRecord extends Model
|
|
|
|
|
* The model with the foreign key of the relationship will be deleted if `$delete` is true. |
|
|
|
|
* Otherwise, the foreign key will be set null and the model will be saved without validation. |
|
|
|
|
* |
|
|
|
|
* @param string $name the name of the relationship. |
|
|
|
|
* @param string $name the case sensitive name of the relationship. |
|
|
|
|
* @param ActiveRecord $model the model to be unlinked from the current one. |
|
|
|
|
* @param boolean $delete whether to delete the model that contains the foreign key. |
|
|
|
|
* If false, the model's foreign key will be set null and saved. |
|
|
|
@ -1382,7 +1399,7 @@ class ActiveRecord extends Model
|
|
|
|
|
/** @var $viaClass ActiveRecord */ |
|
|
|
|
$viaClass = $viaRelation->modelClass; |
|
|
|
|
$viaTable = $viaClass::tableName(); |
|
|
|
|
unset($this->_related[strtolower($viaName)]); |
|
|
|
|
unset($this->_related[$viaName]); |
|
|
|
|
} else { |
|
|
|
|
$viaRelation = $relation->via; |
|
|
|
|
$viaTable = reset($relation->via->from); |
|
|
|
|