【问题标题】:Typescript Sequelize create data with keys linked to data in a transactionTypescript Sequelize 使用链接到事务中数据的键创建数据
【发布时间】:2021-09-16 07:04:53
【问题描述】:

我正在为一些可能很简单的事情而苦苦挣扎。 我正在使用带有 sequelize 和 typescript 的 postgrès SQL。

我想做的是创建两件事,一件作为另一件的参考,但如果创建一个失败,那么我不想提交任何东西。

这是我的代码,我试图在其中创建某人并分配给他一些鞋子。

CREATE TABLE User
(
  id BIGSERIAL PRIMARY KEY,
  firstname TEXT,
  lastName TEXT
);

CREATE TABLE Shoes
(
  id BIGSERIAL PRIMARY KEY,
  size INTEGER NOT NULL,
  idUser BIGINT REFERENCES User(id) NOT NULL
);
async function operations() {
  const t = await sequelize.transaction();
  try {
    await User.create({
      firstName: 'Bart',
      lastName: 'Simpson'
    }, { transaction: t });

    await Shoes.create({
      idUser: // here I want the id of my futur new creation (bart simpson)
      size: 43
    }, { transaction: t });
    await t.commit();

  } catch (error) {
    await t.rollback();
  }
}

operations.then(() => {/*do something*/})

问题是,我不知道如何获取新用户的未来 ID,如果数据库为空,或者如果我获得最新的 id 用户并添加1 然后我收到错误violates foreign key constraint。 我认为这是因为用户不存在于数据库中,但它存在于事务中。

如果有人可以帮助我:)

【问题讨论】:

    标签: sql database typescript postgresql sequelize.js


    【解决方案1】:

    事实上,在 get 中发送事务也可以返回将在事务中创建的值,因此只需要使用 get 并在方法中发送完全相同的事务

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-04
      • 2015-09-26
      • 2014-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-22
      • 1970-01-01
      相关资源
      最近更新 更多