在 Sequelize 中仅更改迁移中的列类型是否会保留其原始约束?

问题描述 投票:0回答:1

我正在开发一个 Express 项目并使用 Sequelize 作为我的 ORM,并且我定义了以下 Sequelize 模型:

Field.init({
  type: {
    type: DataTypes.STRING,    
    allowNull: false,
    unique: true,
  }
}, {
  sequelize,   
  underscored: true,
  tableName: "field",
});

现在假设我想限制类型列的字符数并创建如下所示的迁移(

async up
是此处的重点):

'use strict';
const { Transaction } = require('sequelize');

module.exports = {
  async up(queryInterface, Sequelize) {
    return queryInterface.sequelize.transaction({
      isolationLevel: Transaction.ISOLATION_LEVELS.SERIALIZABLE,
    }, async t => {
        await queryInterface.changeColumn('field', 'type', {
                type: Sequelize.STRING(400),
                allowNull: false,
            },
            { transaction: t },
        );
    });
  },

  async down(queryInterface, Sequelize) {
    return queryInterface.sequelize.transaction({
      isolationLevel: Transaction.ISOLATION_LEVELS.SERIALIZABLE,
    }, async t => {
        await queryInterface.changeColumn('field', 'type', {
                type: Sequelize.STRING,    
                allowNull: false,
            },
            { transaction: t },
        );
    });
  }
};

该列还会保留

unique
allowNull
约束吗?或者这些会被删除,因为在迁移中我只列出了我的列的新类型?

node.js express sequelize.js
1个回答
0
投票
  • 在 Sequelize 迁移中,添加新约束不会自动删除旧约束
  • 当您创建新迁移来添加约束时,它将添加指定的约束,而不会影响任何现有约束,除非您在同一或单独的迁移中显式删除它们。
© www.soinside.com 2019 - 2024. All rights reserved.