diff --git a/application/Espo/Core/ORM/Repository/Option/SaveOption.php b/application/Espo/Core/ORM/Repository/Option/SaveOption.php index 37ba61f8f5..01972148a3 100644 --- a/application/Espo/Core/ORM/Repository/Option/SaveOption.php +++ b/application/Espo/Core/ORM/Repository/Option/SaveOption.php @@ -61,6 +61,11 @@ class SaveOption * Keep dirty. Boolean. */ public const KEEP_DIRTY = BaseSaveOption::KEEP_DIRTY; + /** + * Keep an entity relations map. Boolean. + * @since 9.0.0 + */ + public const KEEP_RELATIONS = BaseSaveOption::KEEP_RELATIONS; /** * Skip hooks. Boolean. */ diff --git a/application/Espo/ORM/Repository/Option/SaveOption.php b/application/Espo/ORM/Repository/Option/SaveOption.php index 4573f6c5f0..d13d8d7df9 100644 --- a/application/Espo/ORM/Repository/Option/SaveOption.php +++ b/application/Espo/ORM/Repository/Option/SaveOption.php @@ -34,4 +34,5 @@ class SaveOption public const SKIP_ALL = 'skipAll'; public const KEEP_NEW = 'keepNew'; public const KEEP_DIRTY = 'keepDirty'; + public const KEEP_RELATIONS = 'keepRelations'; } diff --git a/application/Espo/ORM/Repository/RDBRepository.php b/application/Espo/ORM/Repository/RDBRepository.php index b8abb91c5b..e98187e904 100644 --- a/application/Espo/ORM/Repository/RDBRepository.php +++ b/application/Espo/ORM/Repository/RDBRepository.php @@ -182,7 +182,9 @@ class RDBRepository implements Repository $entity->setAsNotBeingSaved(); } - $this->relationsMap?->get($entity)?->resetAll(); + if (empty($options[SaveOption::KEEP_RELATIONS])) { + $this->relationsMap?->get($entity)?->resetAll(); + } } /**