gpt4 book ai didi

one-to-many - 一对多 - Sequelize 更新 - 不删除/插入 child

转载 作者:行者123 更新时间:2023-12-03 22:20:28 24 4
gpt4 key购买 nike

所以我已经为一对多的映射更新苦苦挣扎了几个小时。

我有一个 project,它具有某些 tasks(例如)。
我通过前端添加和删除任务,并通过运行 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,这是不可能的,因为它不可为空。

我目前正在“手动”添加 tasks 并删除它们,但这似乎是使用框架的一种愚蠢的方式。

谁能告诉我如何在不调用 Tasks.createBulkTasks.destroy 的情况下以一对多关系正确地进行这项工作?

编辑以包括模型
JSON 对象如下所示:
{
id: 1,
projectName: 'nameOfTheProject',
Tasks: [
projectId: 1,
name: 'taskName'
]
}

最佳答案

请尝试将嵌套到 projectId 对象的 ProjectId 对象上的属性名称 Tasks 更改为 projectToUpdate

更新

Looking at sequelize's source ,似乎 Instance.$save() 函数(由您正在使用的 Instance.$update() 调用)在 更新 时不支持嵌套模型创建 - 它在执行之前检查标志 wasNewRecord 是否为 true

关于one-to-many - 一对多 - Sequelize 更新 - 不删除/插入 child ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37923194/

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