所以我现在一直在用一对多的映射更新来挣扎几个小时。
我有一个project
具有某些tasks
(例如)。
我通过前端添加和删除任务,并通过后续运行后续发送修改后的对象。
然后我尝试按如下方式更新记录:
return models.Project
.findOne({
where: { id: projectToUpdate.id },
include: [models.Task]
})
.then(function (ProjectFromDb) {
return models.sequelize
.transaction({
isolationLevel: models.sequelize.Transaction.ISOLATION_LEVELS.READ_COMMITTED
},
function (t) {
return ProjectFromDb
.update(projectToUpdate,
{
include: [{ model: models.Task }]
})
});
})
.then(function (result) {
return output.getSuccessResult(....
})
.catch(function (error) {
return output.getErrorResult(....
});
但这只会更新Project
接下来,我尝试使用额外的then
电话更新它们:
.then(function (updateResult) {
return updateResult.setTasks(projectToUpdate.Tasks, {transaction: t})
})
但是这会给我一个结果,他正在尝试更新Task
并将ProjectId
设置为NULL
这是不可能的,因为它不可为空。
我目前正在“手动”添加tasks
并删除它们,但这似乎是使用框架的一种愚蠢方式。
任何人都可以告诉我如何在没有调用Tasks.createBulk
和Tasks.destroy
的情况下以一对多的关系正确地完成这项工作吗?
编辑包含模型 JSON对象如下所示:
{
id: 1,
projectName: 'nameOfTheProject',
Tasks: [
projectId: 1,
name: 'taskName'
]
}
答案 0 :(得分:1)
请尝试将嵌套到projectId
对象的ProjectId
对象的属性名称Tasks
更改为projectToUpdate
。
<强>更新强>
Looking at sequelize's source,当您更新<时,似乎Instance.$save()
函数(由您正在使用的Instance.$update()
调用)不支持嵌套模型创建/ strong> it - 在执行之前检查标记wasNewRecord
是否为true
。