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

Node.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: "",

在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);
    });
  });
});  
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!
        }