From 4d79a359bdb8a21067cbc4665f78b45bd3d8bfcc Mon Sep 17 00:00:00 2001 From: Marc-Roig Date: Tue, 28 Mar 2023 14:37:24 +0200 Subject: [PATCH] feat: compute omitIds --- .../core/database/lib/entity-manager/index.js | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/packages/core/database/lib/entity-manager/index.js b/packages/core/database/lib/entity-manager/index.js index 2634c87f7c..1d19c3e317 100644 --- a/packages/core/database/lib/entity-manager/index.js +++ b/packages/core/database/lib/entity-manager/index.js @@ -1233,7 +1233,6 @@ const createEntityManager = (db) => { }, // TODO: Clone polymorphic relations - // TODO: Excluded relation attributes /** * * @param {string} uid - uid of the entity to clone @@ -1276,8 +1275,23 @@ const createEntityManager = (db) => { return; } + let omitIds = []; + if (has(attrName, data)) { + const cleanRelationData = toAssocs(data[attrName]); + + // Don't clone if the relation attr is being set + if (cleanRelationData.set) { + return; + } + + // Disconnected relations don't need to be cloned + if (cleanRelationData.disconnect) { + omitIds = toIds(cleanRelationData.disconnect); + } + } + if (isOneToAny(attribute) && isBidirectional(attribute)) { - await replaceRegularRelations({ targetId, sourceId, attribute, transaction }); + await replaceRegularRelations({ targetId, sourceId, attribute, omitIds, transaction }); } else { await cloneRegularRelations({ targetId, sourceId, attribute, transaction }); }