diff --git a/src/Repositories/Behaviors/HandleBrowsers.php b/src/Repositories/Behaviors/HandleBrowsers.php index f59416f7a..85b36083c 100644 --- a/src/Repositories/Behaviors/HandleBrowsers.php +++ b/src/Repositories/Behaviors/HandleBrowsers.php @@ -5,6 +5,7 @@ use A17\Twill\Models\Behaviors\HasMedias; use Illuminate\Database\Eloquent\Model as EloquentModel; use Illuminate\Database\Eloquent\Relations\BelongsTo; +use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Support\Arr; use Illuminate\Support\Str; @@ -86,11 +87,29 @@ public function updateBrowser($object, $fields, $relationship, $positionAttribut $foreignKey = $object->$relationship()->getForeignKeyName(); $id = Arr::get($relatedElements, '0.id', null); $object->update([$foreignKey => $id]); + } elseif ($object->$relationship() instanceof HasMany) { + $this->updateBelongsToInverseBrowser($object, $relationship, $relatedElements); } else { $object->$relationship()->sync($relatedElementsWithPosition); } } + private function updateBelongsToInverseBrowser($object, $relationship, $relatedElements) + { + $foreignKey = $object->$relationship()->getForeignKeyName(); + $relatedModel = $object->$relationship()->getRelated(); + + $object->$relationship->each(function ($item) use ($foreignKey) { + $item->update([$foreignKey => null]); + }); + + $object->$relationship()->saveMany( + collect($relatedElements)->map(function ($related) use ($relatedModel) { + return $relatedModel->find($related['id']); + }) + ); + } + /** * @param \A17\Twill\Models\Model $object * @param array $fields