【问题标题】:sequelize create new record with already existing foreign keysequelize 使用已经存在的外键创建新记录
【发布时间】:2019-03-04 12:20:25
【问题描述】:

我想为现有用户创建一个新的登录记录。 我的用户模型是这样的:

'use strict';
module.exports = (sequelize, DataTypes) => {
  const User = sequelize.define('User', {
    userId: {
      type: DataTypes.INTEGER,
      primaryKey: true,
    },
    firstName: DataTypes.STRING,
    lastName: DataTypes.STRING,
    email: DataTypes.STRING,
  }, {  });
  User.associate = function(models) {
    models.User.hasMany(models.Login, {
      foreignKey: 'userId',
      as: 'loginUserId'
    });
  };
  return User;
};

我的登录模型如下所示:

'use strict';
module.exports = (sequelize, DataTypes) => {
  const Login = sequelize.define('Login', {
    loginId: {
      type: DataTypes.INTEGER,
      primaryKey: true,
      autoIncrement: true,
    },
    ipAddress: DataTypes.STRING,
    isSuccessfullLogin: DataTypes.BOOLEAN,
  }, {});
  Login.associate = function(models) {
    Login.belongsTo(models.User, {
      foreignKey: 'userId',
      onDelete: 'CASCADE',
      as: 'loginUserId'
    });
  };
  return Login;
};

当我尝试通过这段代码在登录表中插入一条记录时:

const loginRecord = await models.Login.create({
    ipAddress: "127.0.0.1,
    isSuccessfullLogin: true,
    loginUserId: 2,
  })

它给我带来了错误

未处理的拒绝 SequelizeDatabaseError:字段 'loginUserId' 没有默认值

注意:Mysql 向我显示了 Login 表中的 loginUserId,它还向我显示了它作为外键的约束。

感谢任何帮助。

【问题讨论】:

    标签: node.js sequelize.js


    【解决方案1】:

    我建议将 id 添加到模型 Login 并将 id 更改为 primaryKey

    'use strict';
    module.exports = (sequelize, DataTypes) => {
      const Login = sequelize.define('Login', {
        id: {
          type: DataTypes.INTEGER,
          primaryKey: true,
          autoIncrement: true,
        },
        userId: DataTypes.INTEGER,
        ipAddress: DataTypes.STRING,
        isSuccessfullLogin: DataTypes.BOOLEAN,
      }, {});
      Login.associate = function(models) {
        Login.belongsTo(models.User, {
          foreignKey: 'userId',
          onDelete: 'CASCADE',
          as: 'loginUserId'
        });
      };
      return Login;
    };
    

    将记录插入表登录:

    const loginRecord = await models.Login.create({
        ipAddress: "127.0.0.1,
        isSuccessfullLogin: true,
        userId: 2,
      })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多