如何在sequelize中设置外键
How to set foreign keys in sequelize
我在 models.I 使用 sequelize-cli 创建模型并且 migrations.Below 是我的代码中创建外键时遇到问题。
我需要在 End_user 和 End_user_authorization model.But 之间建立关系 我在 Dbeaver.What 中看不到关系 我正在做 wrong.Kindly 指南。
model/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;
};
model/End_user_授权
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;
};
migration/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');
}
};
我已经解决了 issue.I 分享,因为它可能对任何人都有帮助 else.Just 请确保您首先创建一个模型,其 Pk 将用于与其他人建立关系 table ....假设您有两个模型用户和帖子。
你想在帖子 model.Make 中保留 User_id 一定要先创建用户模型。
我在 models.I 使用 sequelize-cli 创建模型并且 migrations.Below 是我的代码中创建外键时遇到问题。 我需要在 End_user 和 End_user_authorization model.But 之间建立关系 我在 Dbeaver.What 中看不到关系 我正在做 wrong.Kindly 指南。
model/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;
};
model/End_user_授权
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;
};
migration/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');
}
};
我已经解决了 issue.I 分享,因为它可能对任何人都有帮助 else.Just 请确保您首先创建一个模型,其 Pk 将用于与其他人建立关系 table ....假设您有两个模型用户和帖子。 你想在帖子 model.Make 中保留 User_id 一定要先创建用户模型。