From af657e9399e3ac74ed70a0b35089b24e07cf56e9 Mon Sep 17 00:00:00 2001 From: Samuel Georges Date: Sat, 17 Oct 2015 11:40:07 +1100 Subject: [PATCH] Fixes #1042 - remove fillable constraint on models when saving Form fields are already constrained by their fields.yaml definition (values not defined in the yaml will not be saved) so we don't need to double dip by enforcing fillable too. --- .../backend/behaviors/RelationController.php | 18 +++++++++--------- modules/backend/widgets/Form.php | 2 +- 2 files changed, 10 insertions(+), 10 deletions(-) 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) {