recurrences() ->each(function (UserDishRecurrence $recurrence) { $recurrence->recurrence->delete(); $recurrence->delete(); }); $recurrences->each(function (array $recurrence) use ($userDish) { $recurrenceType = Arr::get($recurrence, 'type'); $recurrenceValue = Arr::get($recurrence, 'value'); if (! $recurrenceType || ! $recurrenceValue) { return; } match ($recurrenceType) { WeeklyRecurrence::class => (new CreateFixedRecurrenceAction)->execute($userDish, $recurrenceType, $recurrenceValue), MinimumRecurrence::class => (new CreateMinimumRecurrenceAction)->execute($userDish, $recurrenceType, $recurrenceValue), default => throw new InvalidRecurrenceTypeException, }; }); return $userDish->refresh(); } }