微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在sequelize中设置外键

如何解决如何在sequelize中设置外键

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

模型/End_user

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');
}
 };

解决方法

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。