【问题标题】:How to set foreign keys in sequelize如何在sequelize中设置外键
【发布时间】:2021-06-20 22:04:42
【问题描述】:

我在我的模型中创建外键时遇到问题。我使用 sequelize-cli 创建模型和迁移。下面是我的代码.. 我需要在 End_user 和 End_user_authorization 模型之间建立关系。但我在 Dbeaver 中看不到关系。我做错了什么。请指导。

模型/最终用户

static associate(models) {
  // define association here


  End_user.hasOne(models.End_user_authorization,{
    foreignKey : 'userId',
    as:'End_user_authorization',
    onDelete:'CASCADE'
  });
   }
      };


End_user.init({
 firstName: DataTypes.STRING,
 middleName: DataTypes.STRING,
 lastName: DataTypes.STRING,
 nickName: DataTypes.STRING,
 email: DataTypes.STRING,
 mobileNumber: DataTypes.INTEGER,
 bloodGroup: DataTypes.STRING,
 fatherName: DataTypes.STRING,
 motherName: DataTypes.STRING,
 fingerPrints: DataTypes.BOOLEAN,
 bForm: DataTypes.INTEGER
 }, {
sequelize,
modelName: 'End_user',
});
 return End_user;
};

模型/End_user_authorization

   static associate(models) {
  // define association here
    End_user_authorization.belongsTo(models.End_user,{
      foreignKey : 'userId',
      onDelete : 'CASCADE'
  });

   }
  };
   End_user_authorization.init({
     userId: DataTypes.INTEGER,
     authCode: DataTypes.STRING,
     regDeviceId: DataTypes.INTEGER,
     regDeviceName: DataTypes.STRING,
     expiry: DataTypes.INTEGER,
     ipAddress: DataTypes.STRING
      },
      {
       sequelize,
       modelName: 'End_user_authorization',
       });
        return End_user_authorization;
        };

迁移/End_user_authorization

忽略迁移文件中的ipAddress部分

            'use strict';
          module.exports = {
           up: async (queryInterface, Sequelize) => {
            await queryInterface.createTable('End_user_authorizations', {
               id: {
                  allowNull: false,
                  autoIncrement: true,
                  primaryKey: true,
                  type: Sequelize.INTEGER
                   },
               userId: {
                  type: Sequelize.INTEGER,
                  onDelete: 'CASCADE',
                 references: {
                      model: 'End_user',
                      key: 'id',
                             }
                        },
                authCode: {
                    type: Sequelize.STRING
                      },
                regDeviceId: {
                     type: Sequelize.INTEGER
                            },
                regDeviceName: {
                       type: Sequelize.STRING
                           },
                 expiry: {
                      type: Sequelize.INTEGER
                           },
                  ipAddress: {
                       type: Sequelize.STRING,
                       onDelete:'CASCADE',
                  references:{
                  model:'AllowedIp',
                  key:'ipAddress',
                  }
  },
  createdAt: {
    allowNull: false,
    type: Sequelize.DATE
  },
  updatedAt: {
    allowNull: false,
    type: Sequelize.DATE
     }
    });
  },
 down: async (queryInterface, Sequelize) => {
   await queryInterface.dropTable('End_user_authorizations');
}
 };

【问题讨论】:

  • 当您在 ORM 中创建关联时,许多 ORM 不会在数据库中创建外键约束。那到Sequelize中的案例。我不知道情况是否仍然如此;好久没用Sequelize了。

标签: node.js foreign-keys sequelize.js


【解决方案1】:

我已经解决了这个问题。我正在分享,因为它可能对其他人有帮助。只要确保你首先创建一个模型,它的 Pk 将用于与其他表建立关系......假设你有两个模型用户和帖子。 您希望将 User_id 保留在帖子模型中。请务必先创建用户模型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-18
    • 1970-01-01
    • 1970-01-01
    • 2018-11-12
    • 1970-01-01
    • 2020-07-09
    • 1970-01-01
    • 2020-06-19
    相关资源
    最近更新 更多