|
|
|
@ -238,7 +238,7 @@ class SaveRelationsBehavior extends Behavior
|
|
|
|
|
if ($relation->multiple === false && !empty($model->{$relationName})) { |
|
|
|
|
Yii::trace("Setting foreign keys for {$relationName}", __METHOD__); |
|
|
|
|
foreach ($relation->link as $relatedAttribute => $modelAttribute) { |
|
|
|
|
if ($model->{$modelAttribute} !== $model->{$relationName}->{$relatedAttribute} && !in_array($modelAttribute, $model->primaryKey())) { |
|
|
|
|
if ($model->{$modelAttribute} !== $model->{$relationName}->{$relatedAttribute}) { |
|
|
|
|
$model->{$modelAttribute} = $model->{$relationName}->{$relatedAttribute}; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
@ -252,7 +252,7 @@ class SaveRelationsBehavior extends Behavior
|
|
|
|
|
/** |
|
|
|
|
* For each related model, try to save it first. |
|
|
|
|
* If set in the owner model, operation is done in a transactional way so if one of the models should not validate |
|
|
|
|
* or be saved, a rollback will occur. |
|
|
|
|
* or be saved, a rollback will occur., |
|
|
|
|
* This is done during the before validation process to be able to set the related foreign keys. |
|
|
|
|
* @param BaseActiveRecord $model |
|
|
|
|
* @param ModelEvent $event |
|
|
|
@ -260,7 +260,10 @@ class SaveRelationsBehavior extends Behavior
|
|
|
|
|
*/ |
|
|
|
|
protected function saveRelatedRecords(BaseActiveRecord $model, ModelEvent $event) |
|
|
|
|
{ |
|
|
|
|
if (($model->isNewRecord && $model->isTransactional($model::OP_INSERT)) || (!$model->isNewRecord && $model->isTransactional($model::OP_UPDATE)) || $model->isTransactional($model::OP_ALL)) { |
|
|
|
|
if (($model->isNewRecord && $model->isTransactional($model::OP_INSERT)) |
|
|
|
|
|| (!$model->isNewRecord && $model->isTransactional($model::OP_UPDATE)) |
|
|
|
|
|| $model->isTransactional($model::OP_ALL) |
|
|
|
|
) { |
|
|
|
|
$this->_transaction = $model->getDb()->beginTransaction(); |
|
|
|
|
} |
|
|
|
|
try { |
|
|
|
@ -269,9 +272,16 @@ class SaveRelationsBehavior extends Behavior
|
|
|
|
|
$relation = $model->getRelation($relationName); |
|
|
|
|
if (!empty($model->{$relationName})) { |
|
|
|
|
if ($relation->multiple === false) { |
|
|
|
|
$relationModel = $model->{$relationName}; |
|
|
|
|
if (!($model::isPrimaryKey(array_values($relation->link)) |
|
|
|
|
&& $relationModel::isPrimaryKey(array_keys($relation->link)) |
|
|
|
|
&& $model->getIsNewRecord() |
|
|
|
|
&& $relationModel->getIsNewRecord() |
|
|
|
|
)) { |
|
|
|
|
// Save Has one relation new record |
|
|
|
|
$pettyRelationName = Inflector::camel2words($relationName, true); |
|
|
|
|
$this->saveModelRecord($model->{$relationName}, $event, $pettyRelationName, $relationName); |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
// Save Has many relations new records |
|
|
|
|
/** @var BaseActiveRecord $relationModel */ |
|
|
|
|