Sequelize.js Sequelize-如何将数据插入多个表?

Sequelize.js Sequelize-如何将数据插入多个表?,sequelize.js,Sequelize.js,我是新使用Sequelize的,我遇到了一个问题,我不明白为什么会发生这种情况。我正在尝试创建一个新用户,该用户的数据在两个表中定义。一个是用户表,其中包含一般用户的信息,如firstname、lastname、email等。。另一个表包含用户的设置,如用户要使用的配色方案等。。这些表格的模型如下所示 用户模型: module.exports = (sequelize, DataTypes) => { const User = sequelize.define('user', {

我是新使用Sequelize的,我遇到了一个问题,我不明白为什么会发生这种情况。我正在尝试创建一个新用户,该用户的数据在两个表中定义。一个是用户表,其中包含一般用户的信息,如firstname、lastname、email等。。另一个表包含用户的设置,如用户要使用的配色方案等。。这些表格的模型如下所示

用户模型:

module.exports = (sequelize, DataTypes) => {
  const User = sequelize.define('user', {
    user_id: {
      type: DataTypes.INTEGER,
      primaryKey: true,
      autoIncrement: true,
      allowNull: false
    },
    firstname: {
      type: DataTypes.STRING,
      allowNull: false,
    },
    lastname: {
      type: DataTypes.STRING,
      allowNull: false,
    },
    email: {
      type: DataTypes.STRING,
      allowNull: false,
      unique: {
        args: true,
      },
    },
    password: {
      type: DataTypes.STRING,
      allowNull: false,
    }
  }
);

  return User;
};
用户设置模型:

module.exports = (sequelize, DataTypes) => {
    const UserSettings = sequelize.define('user_settings', {
        user_id: {
            type: DataTypes.INTEGER,
            unique: true,
            allowNull: false
        },
        wants_update_notification: {
            type: DataTypes.BOOLEAN,
            allowNull: false
        },
        color_scheme: {
            type: DataTypes.INTEGER,
            allowNull: false 
        }
    });

    UserSettings.associate = (models) => {
        UserSettings.belongsTo(models.User, { foreignKey: 'user_id', as: 'user' });
    };
    
    return UserSettings;
} 
现在,当我尝试创建一个新用户时,服务器通过端点的主体获取一般用户的信息。使用此信息,服务器将创建一个新用户。接下来,我将默认用户设置添加到创建的用户返回的对象中,并尝试在用户设置表中插入数据,如下所示:

let theUser = await sequelizeConnection.models.user.create(req.body);

theUser.wants_update_notification = false;
theUser.color_scheme = 0;

await sequelizeConnection.models.user_settings.create(theUser);

但是,这将返回错误:
user\u settings.user\u id不能为null
。我觉得这很奇怪,因为user_id是由用户模型的create方法返回的。如果我记录用户的
内容
,我可以清楚地看到存在一个用户id。这里发生了什么?

您正在尝试将想要的更新通知和配色方案添加到
用户
而不是
用户设置

let theUser = await sequelizeConnection.models.user.create(req.body); // theUser is a user model instance

theUser.wants_update_notification = false; // here!
theUser.color_scheme = 0;

await sequelizeConnection.models.user_settings.create(theUser);
正确版本:

await sequelizeConnection.sequelize.transaction(async(transaction) => {
        const createdUser = await sequelizeConnection.models.user.create(req.body, {transaction});

        const userSettings = {
            wants_update_notification: false,
            color_scheme: 0,
            user_id: createdUser.user_id, // Associate user with user_settings
        };
        await sequelizeConnection.models.user_settings.create(userSettings, {transaction});
});
我建议您使用
sequelize.transaction
在数据创建失败时进行回滚