我正在使用.build
创建一个模型实例,以后将其保存。
const modelInstance = sequelize.models.SomeModel.build({
someKey: 'someValue',
// ...
});
有条件地添加各种属性之后,我叫.save()
,然后将记录与另一个模型相关联。
modelInstance.save().then((modelInstance) => {
modelInstance.setParent(parentInstance);
});
我发现,如果我在.setParent()
之前调用.save()
,则会将一个空的SomeModel
记录放入数据库中。因此,我必须先致电.save()
。但是,这需要两个查询。
如何在单个查询中将.build()
与.save()
一起使用?
答案 0 :(得分:2)
如果您的父母尚未保存,则可以通过以下方式同时保存它:
return SomeModel.create({
someKey: 'someValue',
parent: {
parentKey: 'parentValue'
}
}, {
include: [{
association: ParentModel
}]
});
如果父实例已经保存(例如来自findOne的实例),那么您的解决方案是正确的。只是一件事:您可能应该返回第二个承诺:
modelInstance.save().then((modelInstance) => {
return modelInstance.setParent(parentInstance);
});
如果父实例存在并且您确实不想发出这两个请求,则也许您可以弄清楚如何建立关联,而不必进行后续处理。例如,如果关联是由父级的外键定义的,则可以这样保存:
return SomeModel.create({
someKey: 'someValue',
parentId: parentInstance.id
});
但是,当然,这意味着返回的对象不包含父属性,您必须在检索之后进行getParent()
的操作,这将导致第二次请求。