一对多 - 续集更新 - 不是 removing/inserting children
one to many - sequelize update - not removing/inserting children
所以我已经为 one-to-many 映射更新苦苦挣扎了几个小时。
我有一个 project
有一定的 tasks
(例如)。
我通过前端添加和删除任务,并将修改后的 object 发送到后端 运行 sequelize.
然后我尝试更新记录如下:
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
这是不可能的,因为它是 non-nullable .
我目前正在 "manually" 添加 tasks
并删除它们,但这似乎是一种愚蠢的框架使用方式。
任何人都可以告诉我如何在 one-to-many 关系中正确地完成这项工作而无需我调用 Tasks.createBulk
和 Tasks.destroy
?
编辑以包含模型
JSON object 看起来像这样:
{
id: 1,
projectName: 'nameOfTheProject',
Tasks: [
projectId: 1,
name: 'taskName'
]
}
请尝试将嵌套到 projectToUpdate
对象的 Tasks
对象的 属性 名称 projectId
更改为 ProjectId
。
更新
Looking at sequelize's source, it seems that the Instance.$save()
function (which is called by Instance.$update()
您正在使用)不支持在您 更新 时创建嵌套模型 - 它检查标志 wasNewRecord
是否true
在做之前。
所以我已经为 one-to-many 映射更新苦苦挣扎了几个小时。
我有一个 project
有一定的 tasks
(例如)。
我通过前端添加和删除任务,并将修改后的 object 发送到后端 运行 sequelize.
然后我尝试更新记录如下:
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
这是不可能的,因为它是 non-nullable .
我目前正在 "manually" 添加 tasks
并删除它们,但这似乎是一种愚蠢的框架使用方式。
任何人都可以告诉我如何在 one-to-many 关系中正确地完成这项工作而无需我调用 Tasks.createBulk
和 Tasks.destroy
?
编辑以包含模型 JSON object 看起来像这样:
{
id: 1,
projectName: 'nameOfTheProject',
Tasks: [
projectId: 1,
name: 'taskName'
]
}
请尝试将嵌套到 projectToUpdate
对象的 Tasks
对象的 属性 名称 projectId
更改为 ProjectId
。
更新
Looking at sequelize's source, it seems that the Instance.$save()
function (which is called by Instance.$update()
您正在使用)不支持在您 更新 时创建嵌套模型 - 它检查标志 wasNewRecord
是否true
在做之前。