diff --git a/modules/backend/behaviors/RelationController.php b/modules/backend/behaviors/RelationController.php index 07d4ab4f4..a2813d876 100644 --- a/modules/backend/behaviors/RelationController.php +++ b/modules/backend/behaviors/RelationController.php @@ -912,15 +912,13 @@ class RelationController extends ControllerBehavior $sessionKey = $this->deferredBinding ? $this->relationGetSessionKey(true) : null; if ($this->viewMode == 'multi') { - - if ($this->relationType == 'hasMany') { - $newModel = $this->relationObject->create($saveData, $sessionKey); - } - elseif ($this->relationType == 'belongsToMany') { - $newModel = $this->relationObject->create($saveData, [], $sessionKey); + $newModel = $this->relationModel; + $modelsToSave = $this->prepareModelsToSave($newModel, $saveData); + foreach ($modelsToSave as $modelToSave) { + $modelToSave->save(null, $this->manageWidget->getSessionKey()); } - $newModel->commitDeferred($this->manageWidget->getSessionKey()); + $this->relationObject->add($newModel, $sessionKey); } elseif ($this->viewMode == 'single') { $newModel = $this->viewModel; @@ -961,8 +959,10 @@ class RelationController extends ControllerBehavior if ($this->viewMode == 'multi') { $model = $this->relationModel->find($this->manageId); - $model->fill($saveData); - $model->save(null, $this->manageWidget->getSessionKey()); + $modelsToSave = $this->prepareModelsToSave($model, $saveData); + foreach ($modelsToSave as $modelToSave) { + $modelToSave->save(null, $this->manageWidget->getSessionKey()); + } } elseif ($this->viewMode == 'single') { $this->viewWidget->setFormValues($saveData); diff --git a/modules/backend/widgets/Form.php b/modules/backend/widgets/Form.php index f5a3eb3df..56e5808cd 100644 --- a/modules/backend/widgets/Form.php +++ b/modules/backend/widgets/Form.php @@ -291,7 +291,7 @@ class Form extends WidgetBase $data = $this->getSaveData(); } - $this->model->fill($data); + $this->model->forceFill($data); $this->data = (object) array_merge((array) $this->data, (array) $data); foreach ($this->allFields as $field) {