如何使用sequelize添加枚举标签?

sta*_*ord 2 sequelize.js

我有一张叫做字符的表。每个字符都有一个称为“状态”的枚举,可以是“悲伤”或“快乐”。如何为列添加新状态“ confused”?我尝试了这种迁移,但失败了:

migration.describeTable('characters').success(function (attributes) {
    migration.changeColumn('characters', 'state',
        {
            type: DataTypes.ENUM,
            values: ['sad', 'happy', 'confused']
        })
        .complete(done);
});
Run Code Online (Sandbox Code Playgroud)

它抱怨错误:类型“ enum_characters_state”已经存在。

Edu*_*djr 7

扩展 briangonzalez 答案,您还需要一个 down 函数来撤消迁移:

'use strict';

module.exports = {
  up: (queryInterface, Sequelize) => {
    return queryInterface.sequelize.query("ALTER TYPE enum_type_name ADD VALUE 'new_value'");
  },

  down: (queryInterface, Sequelize) => {
    var query = 'DELETE FROM pg_enum ' +
      'WHERE enumlabel = \'new_value\' ' +
      'AND enumtypid = ( SELECT oid FROM pg_type WHERE typname = \'enum_type_name\')';
    return queryInterface.sequelize.query(query);
  }
};
Run Code Online (Sandbox Code Playgroud)

更改enum_type_namenew_value以满足您的需要。


bri*_*lez 5

使用最新版本的Sequelize,您可以通过运行查询(假定使用Postgres)来实现:

module.exports = {
  up: function (queryInterface, Sequelize) {
    return queryInterface.sequelize.query("ALTER TYPE enum_character_state ADD VALUE 'confused';");
  }
};
Run Code Online (Sandbox Code Playgroud)