续集使用迁移创建外键时如何将 OnUpdate 设置为 NO ACTION

问题描述

我是 nodejs 的新手。我用 expressjs 创建了一个模板。出于迁移和 ORM 的目的,我使用带有 MysqL2 插件的 squelizeJs。我已经为我的表创建了迁移和模型。但是我无法在创建外键时更改认行为,即更改 onUpdateonDelete

的值

如何在 sequelize 迁移中实现此 sql 查询

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

它创建了一个外键,但是 onUpdateonDelete 都设置为 RESTRICT

我浏览了他们的文档,但找不到有用的东西。

解决方法

您应该尝试在您的关键字模型文件中添加该操作,我们可以在其中定义关联。

static associate(models) {
    // define association here
    Keywords.hasMany(models.Bots,{
        foreignKey: 'id',onUpdate: 'RESTRICT',onDelete: 'RESTRICT'
    });
};

谢谢