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