首页 > 解决方案 > 续集。使用迁移创建外键时如何将 OnUpdate 设置为 NO ACTION

问题描述

我是nodejs的新手。我用 expressJs 创建了一个模板。出于迁移和 ORM 的目的,我将 squelizeJs 与 mysql2 插件一起使用。我为我的表创建了迁移和模型。但是在创建外键时我无法更改默认行为,即更改 和 的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,
        type: Sequelize.BOOLEAN,
        defaultValue: 0
      },
      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

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

标签: node.jssequelize.jssequelize-cli

解决方案


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

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

谢谢


推荐阅读