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

标签 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: "", 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/

相关文章:

node.js - PassportJS(Local) 在序列化用户后,Sequelize 和 Express 停留在挂起状态

node.js - 用户如何使用 sequelize postgres nodejs 互相喜欢发帖?

postgresql - 在 Sequelize 外键中什么是可延迟的?

javascript - 代码中的大型 SQL OR 语句或过滤器?

javascript - 在node.js中获取[无法获取/test.html]

javascript - 无法在 Windows 中使用 node.js 中的 javascript 删除文件

javascript - 如何为 Sequelize 模型设置外键?

javascript - 如何使用 NodeJS 为 Sequelize 模型添加默认值?

mysql - Sequelize 使用 postgres 方言添加双列

node.js - 如何使用socket io连接?