Node.js 在sequelize中使用相同事务插入父/子记录的正确方法(获取父ID)
在sequelize中,我们如何获取父id以更新相同事务中的子记录。我正在尝试这种方法,但它无法获取家长的IDNode.js 在sequelize中使用相同事务插入父/子记录的正确方法(获取父ID),node.js,sequelize.js,Node.js,Sequelize.js,在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: "",
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);
});
});
});
DB关系
Employee.hasMany(EmployeeDetails, {foreignKey:'emp_id'});
它错误地指出emp_id不能为null。任何指向正确方向的指示都将不胜感激。如何获取id以便事务可以正常工作
已解决:实际问题是数据库代码缺少自动增量:true
id: {
type: Sequelize.INTEGER,
primaryKey: true,
**autoIncrement: true** was missing.
},
您缺少的是
t.commit()
&t.rollback()
。您需要newDetails
的承诺链中的newEmployee
,这将引入承诺回调链。下面给出了一个使用Async/Await
的非常简洁的版本,以及t.commit()
和t.rollback()
您缺少的是
t.commit()
&t.rollback()
。您需要newDetails
的承诺链中的newEmployee
,这将引入承诺回调链。下面给出了一个使用Async/Await
的非常简洁的版本,以及t.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
}
}
createUserWithDetails = async(data) => {
try {
const transaction = await db.sequelize.transaction(async (t) => {
let newEmp = await db.Employee.create(employeeData,{transaction:t});
let empDetailData = {x: "", y: "", emp_id: newEmp.id};
let details = await db.EmployeeDetails.create(empDetailData, {transaction:t});
// If you've made it so far everything is ok and
// the transaction will be automatically committed.
res.json(newEmp);
});
return transaction;
}
catch(error) {
// Handle Error
// The transaction is automatically rollbacked!
}