首页 > 解决方案 > Sequelize MySQL Migration - false 独有

问题描述

我正在尝试在 Sequelize 和 MySQL 中编写迁移,它将唯一属性设置为 false。到目前为止,这是我的方法:

module.exports = {
  up: async (queryInterface, Sequelize) => {
          await queryInterface.changeColumn("users", "name", {
              type: Sequelize.STRING,
              allowNull: false,
              unique: true,
          });
          await queryInterface.changeColumn("users", "email", {
              type: Sequelize.STRING,
              allowNull: false,
              unique: true,
         });
    },

 down: async (queryInterface, Sequelize) => {
          await queryInterface.changeColumn("users", "name", {
            type: Sequelize.STRING,
            allowNull: true,
            unique: false,
      });
          await queryInterface.changeColumn("users", "email", {
            type: Sequelize.STRING,
            allowNull: true,
            unique: false,
   });
  },
};

向上迁移与charme 类似,向下迁移适用于allowNull,但不适用于唯一属性。我是 Sequelize 的新手,所以我想知道这里出了什么问题。有人可以帮我吗?

非常感谢您提前。

标签: mysqlnode.jssequelize.js

解决方案


Sequelize 具有“removeConstraint”方法,使用该方法您将能够删除属性的约束。

public removeConstraint(tableName: string, constraintName: string, options: Object): Promise

实际上,如果您在创建时没有指定“constraintName”,它应该是“attributename_unique_key”的形式。

请尝试使用这种方式

module.exports = {
  up: async (queryInterface, Sequelize) => {
    await queryInterface.changeColumn("users", "name", {
      type: Sequelize.STRING,
      allowNull: false,
      unique: true,
    });
    await queryInterface.changeColumn("users", "email", {
      type: Sequelize.STRING,
      allowNull: false,
      unique: true,
    });
  },

  down: async (queryInterface, Sequelize) => {
    await queryInterface.changeColumn("users", "name", {
      type: Sequelize.STRING,
      allowNull: true,
    });
    await queryInterface.removeConstraint("users", "name_unique_key");
    await queryInterface.changeColumn("users", "email", {
      type: Sequelize.STRING,
      allowNull: true,
    });
    await queryInterface.removeConstraint("users", "email_unique_key");
  },
};

有关更多信息,请在此处查看文档


推荐阅读