diff --git a/src/Abstractor/Eloquent/Model.php b/src/Abstractor/Eloquent/Model.php index 85c1db1..e8f12c0 100644 --- a/src/Abstractor/Eloquent/Model.php +++ b/src/Abstractor/Eloquent/Model.php @@ -397,6 +397,7 @@ public function persist(Request $request) $fields = $this->getEditFields(true); + $foreignFields = array_diff_key($fields['main'], $this->getEditFields(false)['main']); if (empty($fields['main']) && $this->getRelations()->isEmpty()) { return; } @@ -412,6 +413,10 @@ public function persist(Request $request) $fieldName = $field->getName(); $requestValue = $request->input("main.{$fieldName}"); + if (! empty($foreignFields) && (! empty($foreignFields[$fieldName])) && (empty($requestValue))) { + $requestValue = null; + } + if (get_class($field->getFormField()) === \FormManager\Fields\Checkbox::class) { if (empty($requestValue)) { // Unchecked checkboxes are not sent, so we force setting them to false @@ -439,7 +444,10 @@ public function persist(Request $request) continue; } - if (! empty($requestValue) || (empty($requestValue) && ! empty($item->getAttribute($fieldName)))) { + if (! empty($requestValue) + || (empty($requestValue) && !empty($item->getAttribute($fieldName))) + || (! empty($foreignFields) && (! empty($foreignFields[$fieldName])) && (empty($requestValue))) + ) { $item->setAttribute( $fieldName, $field->applyFunctions($requestValue) diff --git a/tests/Abstractor/Eloquent/ModelTest.php b/tests/Abstractor/Eloquent/ModelTest.php index 02b8b16..b78c348 100644 --- a/tests/Abstractor/Eloquent/ModelTest.php +++ b/tests/Abstractor/Eloquent/ModelTest.php @@ -498,6 +498,14 @@ public function test_persist() $fieldMock, ] ]); + $this->sut->shouldReceive('getEditFields')->times(1)->with(false)->andReturn([ + 'main' => [ + $fieldMock, + $fieldMock, + $fieldMock, + $fieldMock, + ] + ]); $this->sut->shouldReceive('getRelations')->andReturn(collect(['group' => $relationMock = $this->mock('\Anavel\Crud\Abstractor\Eloquent\Relation\Relation')]));