gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 22:37:08 26 4
gpt4 key购买 nike

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

我相信不可能以创建单个 person 记录的方式合并 2 个关联(包括两者都会创建 2 个记录 - 请证明我错了?)。我尝试了许多主要在 Stockoverflow 上找到的方法,但没有一个方法保存对关联模型的更改,仅保存到主模型。

我的代码:

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);
});

我试过了
1)直接修改相关属性: user.person.creatorID = userID;
2)使用“设置”方法: user.set('person', {...})
3) 使用 user.updateAttributes(...) -> 导致错误“updateAttributes is not a function”

4) 在 create 函数中包含两个模型,但这只会导致创建两个人(并且两个人都只填写了 personID! - 我希望一个用 personID 创建,另一个用 userID (?!))

在选项 1 和 2 的情况下,对象被更改,但不会保存更改。仅保存对父对象本身的直接属性(例如 user.name='new name' )的更改。

最佳答案

答案很简单,但是我花了一段时间来试验它。必须在关联的模型实例上调用 Save,而不是主模型:

user.person.save();

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

关于sequelize.js - 如何保存关联模型的值更改(通过包含附加关联)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57977947/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com