From 49d5491ff95242a3d73e3073ccbc7fe6ffa04825 Mon Sep 17 00:00:00 2001 From: Alexandre Bodin Date: Thu, 18 Apr 2019 12:01:21 +0200 Subject: [PATCH] Fix one to many update --- packages/strapi-hook-bookshelf/lib/relations.js | 6 +++--- packages/strapi-hook-mongoose/lib/relations.js | 8 +++----- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/packages/strapi-hook-bookshelf/lib/relations.js b/packages/strapi-hook-bookshelf/lib/relations.js index ab2d86af09..c4c3a3475b 100644 --- a/packages/strapi-hook-bookshelf/lib/relations.js +++ b/packages/strapi-hook-bookshelf/lib/relations.js @@ -121,16 +121,16 @@ module.exports = { // set relation to null for all the ids not in the list const currentIds = response[current]; - const diff = _.differenceWith(property, currentIds, (a, b) => { + const toRemove = _.differenceWith(currentIds, property, (a, b) => { return `${a[assocModel.primaryKey] || a}` === `${b[assocModel.primaryKey] || b}`; }); const updatePromise = assocModel - .where(assocModel.primaryKey, 'in', currentIds.map(val => val[assocModel.primaryKey]||val)) + .where(assocModel.primaryKey, 'in', toRemove.map(val => val[assocModel.primaryKey]||val)) .save({ [details.via] : null }, { method: 'update', patch: true, require: false }) .then(() => { return assocModel - .where(assocModel.primaryKey, 'in', diff.map(val => val[assocModel.primaryKey]||val)) + .where(assocModel.primaryKey, 'in', property.map(val => val[assocModel.primaryKey]||val)) .save({ [details.via] : primaryKeyValue }, { method: 'update', patch: true, require: false }); }); diff --git a/packages/strapi-hook-mongoose/lib/relations.js b/packages/strapi-hook-mongoose/lib/relations.js index d0691d18c1..d18d8e1606 100644 --- a/packages/strapi-hook-mongoose/lib/relations.js +++ b/packages/strapi-hook-mongoose/lib/relations.js @@ -67,23 +67,21 @@ module.exports = { return _.set(acc, current, property); } case 'oneToMany': { - // receive array of ids or array of objects with ids - // set relation to null for all the ids not in the list const currentIds = response[current]; - const diff = _.differenceWith(property, currentIds, (a, b) => { + const toRemove = _.differenceWith(currentIds, property, (a, b) => { return `${a[assocModel.primaryKey] || a}` === `${b[assocModel.primaryKey] || b}`; }); const updatePromise = assocModel.updateMany({ [assocModel.primaryKey]: { - $in: currentIds.map(val => new mongoose.Types.ObjectId(val[assocModel.primaryKey]||val)) + $in: toRemove.map(val => new mongoose.Types.ObjectId(val[assocModel.primaryKey]||val)) } }, { [details.via] : null }) .then(() => { return assocModel.updateMany({ [assocModel.primaryKey]: { - $in: diff.map(val => new mongoose.Types.ObjectId(val[assocModel.primaryKey]||val)) + $in: property.map(val => new mongoose.Types.ObjectId(val[assocModel.primaryKey]||val)) } }, { [details.via] : primaryKeyValue }); });