我有这样的模型结构,使用Sequelize:
class Company extends Model {
static init(sequelize) {
super.init({
name: { type: DataTypes.STRING },
email: { type: DataTypes.STRING }
}, {
sequelize
});
}
static associate(models) {
this.HasMany(models.Address, { foreignKey: 'company_id', as: 'addresses' })
}
}
class Address extends Model {
static init(sequelize) {
super.init({
street: { type: DataTypes.STRING },
zipcode: { type: DataTypes.STRING },
city: { type: DataTypes.STRING }
}, {
sequelize
});
}
static associate(models) {
this.BelongsTo(models.Company, { foreignKey: 'company_id', as: 'company' })
}
}
我需要在数据库中同时更新“公司”和“地址”,当API有一个 put 请求时,发送一个JSON文件。
插入同时工作,代码:
await Company.create(company,{
include: [{
association: 'addresses'
}]
});
但是,当使用更新方法时,它只更新“公司”的数据,但“地址”不会改变。
有没有人经历过这个问题,并有一个解决方案?我在续集手册里找不到任何东西
2条答案
按热度按时间qlckcl4x1#
我真的不知道关联创建选项是如何工作的,IRL。据我所知,SQL没有办法一次插入多个表。所以,我的猜测是有一些自动魔术正在进行。
WRT更新时,你会被一个很好的老式的多步骤保存/创建/更新过程卡住。我不知道你的约束是什么,但看看关联设置器。这是一个破坏性的小家伙,所以小心。但是如果用户可以在PUT调用上更新、添加或删除Address,则它会特别有用。
这可能是值得的putting this whole effort on one transaction。这不会降低查询的成本。但如果出了问题,它们会一起回滚。
t0ybt7op2#
使用
@hatchifyjs/sequelize-create-with-associations
,它就像这样简单: