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

米奇

我是使用Sequelize的新手,但遇到一个我不明白为什么会发生的问题。我正在尝试创建一个新用户,该用户的数据在两个表中定义。一个是用户表,其中包含一般用户的信息,例如名字,姓氏,电子邮件等。另一个表包含用户的设置,例如用户要使用的配色方案等。这些表的模型如下所示。

用户模型:

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_settings.user_id cannot be null我发现这很奇怪,因为user_id由用户模型的create方法返回。如果我记录其中的内容,则theUser可以清楚地看到存在user_id。这里发生了什么?

马辛

您正在尝试将want_update_notification和color_scheme添加到user而不是user_settings

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来在数据创建失败的情况下进行回滚。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用Sequelize连接多个联结表

来自分类Dev

如何使用Sequelize EmiratesToMany关联?

来自分类Dev

ASP.NET MVC:如何将数据插入多个表?

来自分类Dev

从多个表中提取Sequelize Info

来自分类Dev

在Sequelize中查询关联表

来自分类Dev

如何捕获Sequelize连接错误

来自分类Dev

在Sequelize相关的表优化查询

来自分类Dev

sequelize:如何记录原始查询

来自分类Dev

Sequelize-插入长记录的最佳方法

来自分类Dev

如何将req值传递到Sequelize findAll中

来自分类Dev

节点-将表与Sequelize关联

来自分类Dev

无法在Sequelize中将字符'N'插入PostgreSQL

来自分类Dev

如何将数据数组插入表

来自分类Dev

如何将数据插入表中?

来自分类Dev

如何扩展Sequelize模型

来自分类Dev

如何将记录插入数据库中的多个表中

来自分类Dev

将null或为Sequelize

来自分类Dev

如何将数据插入mysql表?

来自分类Dev

如何将Sequelize模型与预定义表同步

来自分类Dev

如何将多个行数据同时插入到两个表中

来自分类Dev

如何使用sequelize.fn(['if'])?

来自分类Dev

sequelize种子无法在SQLite中插入数据

来自分类Dev

Node Sequelize where 通过多个表

来自分类Dev

从多个表中选择 Sequelize

来自分类Dev

如何执行Sequelize join

来自分类Dev

具有多个字段的 sequelize group by 导致 sequelize 错误

来自分类Dev

如何将mysql查询翻译成sequelize

来自分类Dev

如何使 Sequelize $between 查询?

来自分类Dev

Sequelize 从多个表中销毁