sequelize事务因外键无法插入?

时间:2017-08-10 13:54:21

标签: nodes sequelize.js

使用sequelize事务插入2个表,user和job,每个用户有一个job,userId是job表中的外键:

sequelize.transaction(function(t) {
                 return models.users.create({
                    userType: 'test',
                    username: 'alvin',
                }, {transaction: t}).then(function(user) {
                    return models.job.create({
                        jobType: 'jocker',
                        userId: user.userId // Take away this will work, it is a foreign key
                    });
                }, {transaction: t});
            }).then(function(result) {
                resolve(result);
            }).catch(function(err) {
                reject(err);
            });

为什么呢?从日志中我可以看到2 sql insert语句,但它不运行commit

1 个答案:

答案 0 :(得分:0)

您需要在同一事务中创建作业。看起来您只是将创建作业的事务放在错误的位置。正如我在下面所做的那样移动它可以解决你的问题。

sequelize
  .transaction(function(t) {
    return models.users
      .create(
        {
          userType: 'test',
          username: 'alvin'
        },
        { transaction: t }
      )
      .then(function(user) {
        return models.job.create(
          {
            jobType: 'jocker',
            userId: user.userId
          },
          {
            transaction: t // <-- Second argument to .create
          }
        );
      });
  })
  .then(function(result) {
    resolve(result);
  })
  .catch(function(err) {
    reject(err);
  });
祝你好运:)