diff --git a/src/SaveRelationsBehavior.php b/src/SaveRelationsBehavior.php index 9f39437..be5d8d0 100644 --- a/src/SaveRelationsBehavior.php +++ b/src/SaveRelationsBehavior.php @@ -98,7 +98,8 @@ class SaveRelationsBehavior extends Behavior { /** @var BaseActiveRecord $owner */ $owner = $this->owner; - if (in_array($name, $this->_relations) && $owner->getRelation($name, false)) { + $relation = $owner->getRelation($name, false); + if (in_array($name, $this->_relations) && !is_null($relation)) { return true; } return parent::canSetProperty($name, $checkVars); @@ -117,9 +118,11 @@ class SaveRelationsBehavior extends Behavior $owner = $this->owner; if (in_array($name, $this->_relations)) { Yii::debug("Setting {$name} relation value", __METHOD__); + /** @var ActiveQuery $relation */ + $relation = $owner->getRelation($name); if (!isset($this->_oldRelationValue[$name])) { if ($owner->isNewRecord) { - if ($owner->getRelation($name)->multiple === true) { + if ($relation->multiple === true) { $this->_oldRelationValue[$name] = []; } else { $this->_oldRelationValue[$name] = null; @@ -128,7 +131,7 @@ class SaveRelationsBehavior extends Behavior $this->_oldRelationValue[$name] = $owner->{$name}; } } - if ($owner->getRelation($name)->multiple === true) { + if ($relation->multiple === true) { $this->setMultipleRelation($name, $value); } else { $this->setSingleRelation($name, $value); @@ -146,6 +149,7 @@ class SaveRelationsBehavior extends Behavior { /** @var BaseActiveRecord $owner */ $owner = $this->owner; + /** @var ActiveQuery $relation */ $relation = $owner->getRelation($name); if (!($value instanceof $relation->modelClass)) { $value = $this->processModelAsArray($value, $relation); @@ -164,6 +168,7 @@ class SaveRelationsBehavior extends Behavior { /** @var BaseActiveRecord $owner */ $owner = $this->owner; + /** @var ActiveQuery $relation */ $relation = $owner->getRelation($name); $newRelations = []; if (!is_array($value)) { @@ -261,6 +266,7 @@ class SaveRelationsBehavior extends Behavior // If relation is has_one, try to set related model attributes foreach ($this->_relations as $relationName) { if (array_key_exists($relationName, $this->_oldRelationValue)) { // Relation was not set, do nothing... + /** @var ActiveQuery $relation */ $relation = $model->getRelation($relationName); if ($relation->multiple === false && !empty($model->{$relationName})) { Yii::debug("Setting foreign keys for {$relationName}", __METHOD__); @@ -391,7 +397,7 @@ class SaveRelationsBehavior extends Behavior $this->_relationsSaveStarted = true; // Populate relations with updated values foreach ($this->_newRelationValue as $name => $value) { - $this->owner->populateRelation($name, $value); + $owner->populateRelation($name, $value); } try { foreach ($this->_relations as $relationName) { @@ -487,6 +493,7 @@ class SaveRelationsBehavior extends Behavior /** @var BaseActiveRecord $model */ $model = $this->owner; foreach ($this->_relations as $relationName) { + /** @var ActiveQuery $relation */ $relation = $model->getRelation($relationName); $modelClass = $relation->modelClass; /** @var ActiveQuery $relationalModel */ @@ -506,6 +513,7 @@ class SaveRelationsBehavior extends Behavior { /** @var BaseActiveRecord $owner */ $owner = $this->owner; + /** @var ActiveQuery $relation */ $relation = $owner->getRelation($relationName); // Process new relations