首页 > 解决方案 > 编写 sequlize 迁移更新表 onDelete 属性

问题描述

我正在使用 sequlize ORM,我有迁移文件来创建表之间的关联:

module.exports = {
  up: (queryInterface, Sequelize) => {
    return queryInterface.addColumn('testSessions', 'patientId', {
      type: Sequelize.UUID,
      references: {
        model: 'patients',
        key: 'id',
      },
      onUpdate: 'CASCADE',
      onDelete: 'SET NULL',
    });
  },
  down: async queryInterface => {
    await queryInterface.removeColumn('testSessions', 'patientId');
  },
};

我想将onDelete键更改为“CASCADE”。是否可以编写会更改onDelete属性值的迁移?我不想丢失表中的数据,因此撤消迁移和运行对我来说不是解决方案。

你知道你是否可以编写一个覆盖onDelete值的迁移,它会是什么样子?

标签: javascriptmysqlnode.jssequelize.js

解决方案


只需编写删除约束的 SQL 查询,然后使用sequelize.query添加约束,如下所示:

var table = 'YOURTABLENAME';
var constraint = 'YOURCONSTRAINTNAME';
var constraintFkey = 'CONSTRAINTFKEY';

module.exports = {
  up: (queryInterface, Sequelize) => {
    return queryInterface.sequelize.query(`alter table "${table}" drop constraint "${constraint}"`)
      .then(() => queryInterface.sequelize.query(
        `alter table "${table}"
          add constraint "${constraint}" foreign key("${constraintFkey}") references "property_service" ("id")
          on delete cascade`
      ));
  },

  down: (queryInterface, Sequelize) => {
    return queryInterface.sequelize.query(`alter table "${tableName}" drop constraint "${constraintName}"`)
      .then(() => queryInterface.sequelize.query(
        `alter table "${tableName}"\
          add constraint "${constraintName}" foreign key("${constraintFkey}") references "patients" ("id")
          on delete no action`
      ));
  },
};

推荐阅读