问题描述
我是 nodejs 的新手。我用 expressjs 创建了一个模板。出于迁移和 ORM 的目的,我使用带有 MysqL2 插件的 squelizeJs。我已经为我的表创建了迁移和模型。但是我无法在创建外键时更改默认行为,即更改 onUpdate
和 onDelete
CONSTRAINT `fk_keywords_2`
FOREIGN KEY (`bot_id`)
REFERENCES `mydb`.`bots` (`id`)
ON DELETE RESTRICT
ON UPDATE NO ACTION)
我试过了
'use strict';
module.exports = {
up: async (queryInterface,Sequelize) => {
await queryInterface.createTable('Keywords',{
id: {
allowNull: false,autoIncrement: true,primaryKey: true,type: Sequelize.INTEGER.UNSIGNED
},bot_id: {
allowNull: false,type: Sequelize.INTEGER.UNSIGNED,references: {
model: 'Bots',key: 'id'
},onUpdate: 'NO ACTION',onDelete: 'RESTRICT'
},parent_id: {
type: Sequelize.INTEGER.UNSIGNED
},keyword: {
allowNull: false,type: Sequelize.STRING
},time_duration: {
type: Sequelize.STRING
},is_all_message_config: {
allowNull: false,type: Sequelize.BOOLEAN,defaultValue: 0
},is_catch_all_config: {
allowNull: false,blockedAt: {
type: Sequelize.DATE
},deletedAt: {
type: Sequelize.DATE
},createdAt: {
allowNull: false,type: Sequelize.DATE
},updatedAt: {
allowNull: false,type: Sequelize.DATE
}
},{
uniqueKeys: {
keyword_unique_for_bot_and_parent: {
customIndex: true,fields: ['bot_id','parent_id','keyword','deletedAt']
}
}
});
},down: async (queryInterface,Sequelize) => {
await queryInterface.dropTable('Keywords');
}
};
它创建了一个外键,但是 onUpdate
和 onDelete
都设置为 RESTRICT
我浏览了他们的文档,但找不到有用的东西。
解决方法
您应该尝试在您的关键字模型文件中添加该操作,我们可以在其中定义关联。
static associate(models) {
// define association here
Keywords.hasMany(models.Bots,{
foreignKey: 'id',onUpdate: 'RESTRICT',onDelete: 'RESTRICT'
});
};
谢谢