我将两个模型User
和Person
与两个关联一起存储在persons
表creatorID
和userID
中。创建新的user
时,我想创建关联的person
实例,其中userID
和creatorID
都用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
)。
答案 0 :(得分:0)
答案很简单,但是我花了一些时间对其进行实验。必须在关联的模型实例而非主模型上调用保存:
userID
尽管如此,如果有人知道如何创建同时填写两个外键的双重关联实例,我将不胜感激! ;)