如何保存关联模型的值更改(通过包含附加的关联)?

时间:2019-09-17 15:54:20

标签: sequelize.js

我将两个模型UserPerson与两个关联一起存储在personscreatorIDuserID中。创建新的user时,我想创建关联的person实例,其中userIDcreatorID都用user的{​​{1 }}(这些字段是分开的,因为有时ID可以在没有用户ID的情况下创建-这是有意的)。

我认为不可能以创建单个person记录的方式合并两个关联(包括同时创建两个记录-请证明我错了吗?)。我尝试了很多主要在Stockoverflow上发现的方法,但是没有一个方法可以保存对关联模型的更改,仅保存对主要模型的更改。

我的代码:

person

我尝试过 1)直接修改相关属性: models.User.hasOne(models.Person, { foreignKey: 'userID', onDelete: 'SET NULL' }); models.User.hasMany(models.Person, { as: 'creator', foreignKey: 'creatorID', constraints: true, onDelete: 'CASCADE' }); models.User.create({ name: 'system', person: { name: 'test' } }, { include: [{ model: models.Person, foreignKey: 'userID' }] }) .then(user => { user.name = 'updated name'; // this change gets saved user.person.creatorID = user.ID; // this does not return user.save(); }) .then(user => { console.log(user); });

2)使用“设置”方法: user.person.creatorID = userID;

3)使用user.set('person', {...})->导致错误“ updateAttributes不是函数”

4)在user.updateAttributes(...)函数中包括两个模型,但这只会导致创建两个人(并且两个人都只被填充create!-我希望其中一个是用{{1 }}和另一个personID(?!))

在选项1和2的情况下,对象已更改,但未保存更改。仅保存对父对象本身的直接属性所做的更改(例如personID)。

1 个答案:

答案 0 :(得分:0)

答案很简单,但是我花了一些时间对其进行实验。必须在关联的模型实例而非主模型上调用保存:

userID

尽管如此,如果有人知道如何创建同时填写两个外键的双重关联实例,我将不胜感激! ;)