gpt4 book ai didi

sequelize.js - 构建实例,保存并关联一个查询

转载 作者:行者123 更新时间:2023-12-02 01:00:29 25 4
gpt4 key购买 nike

我正在使用 .build 创建一个模型实例,稍后保存。

const modelInstance = sequelize.models.SomeModel.build({
someKey: 'someValue',
// ...
});

稍后在有条件地添加各种属性之后,我调用 .save() ,然后将记录与另一个模型相关联。
modelInstance.save().then((modelInstance) => {
modelInstance.setParent(parentInstance);
});

我发现如果我在 .setParent() 之前调用 .save() ,则会将一个空的 SomeModel 记录放入数据库中。因此,我必须先调用 .save()。但是,这需要两个查询。

如何在单个查询中将 .build()/ .save().set<x> 一起使用?

最佳答案

如果您的父级尚未保存,您可以通过以下方式同时保存它:

return SomeModel.create({
someKey: 'someValue',
parent: {
parentKey: 'parentValue'
}
}, {
include: [{
association: ParentModel
}]
});

如果父实例已经保存(例如来自 findOne),那么您的解决方案是正确的。只是一件事:您可能应该返回第二个 promise :
modelInstance.save().then((modelInstance) => {
return modelInstance.setParent(parentInstance);
});

如果父实例存在并且您真的不想发出这两个请求,也许您可​​以弄清楚您的关联是如何建立的,并且无需 Sequelize 即可。例如,如果关联是由父项的外键定义的,则可以这样保存:
return SomeModel.create({
someKey: 'someValue',
parentId: parentInstance.id
});

但是,当然,这意味着返回的对象不包含父属性,您必须在之后创建 getParent() 才能检索它,这将导致第二个请求。

关于sequelize.js - 构建实例,保存并关联一个查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51028899/

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