gpt4 book ai didi

node.js - 使用相同的事务在 sequelize 中插入父/子记录的正确方法(获取父 ID)

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

在 sequelize 中,我们如何获取父 ID 以更新同一事务中的子记录。我正在尝试这种方式,但它只是无法获取父级的 ID。

db.sequelize.transaction(function (t) {
return db.Employee.create(employeeData, {transaction:t}).then(function(newEmployee)
{
//how to get the parent ID here?
var empDetailData = {x: "", y: "", emp_id:newEmployee.id};
return db.EmployeeDetails.create(empDetailData, {transaction:t}).then(function(newDetail)
{
res.json(newEmployee);
});
});
});

数据库关系
Employee.hasMany(EmployeeDetails, {foreignKey:'emp_id'});  

它错误地说 emp_id 不能为空。任何指向正确方向的指针将不胜感激。我怎样才能获得 id 以便交易可以工作。

已解决 :实际问题是数据库代码丢失 autoIncrement: true
id: {
type: Sequelize.INTEGER,
primaryKey: true,
**autoIncrement: true** was missing.
},

最佳答案

您缺少的是 t.commit()t.rollback() 。您需要在 newEmployee 的 promise 链中使用 newDetails ,它在 promise 回调链中引入 callback hellAsync/Awaitt.commit() 之后给出了一个使用 t.rollback() 的简洁版本。

async function createUser(employeeData) {
let transaction;
try {

transaction = await db.sequelize.transaction();

const newEmployee = await db.Employee.create( employeeData, {
transaction: transaction
})
const empDetailData = {
x: "",
y: "",
emp_id:newEmployee.id
};
await db.EmployeeDetails.create(empDetailData, {
transaction: transaction
})

await transaction.commit()

res.json(newEmployee)

} catch(error) {
if(transaction) {
await transaction.rollback()
}
// HANDLE THE ERROR AS YOU MANAGE IN YOUR PROJECT
}
}

关于node.js - 使用相同的事务在 sequelize 中插入父/子记录的正确方法(获取父 ID),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59118323/

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