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

时间:2014-07-30 23:36:42

标签: sequelize.js

我有一个名为characters的表。每个角色都有一个名为" state"的枚举,可以是"悲伤"或者"快乐"。如何添加新状态" confused"到我的专栏?我尝试过这次迁移,但失败了:

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

它抱怨错误:输入" enum_characters_state"已经存在。

4 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

使用以下脚本创建迁移:

module.exports = {
  up  : function (queryInterface) {
    return queryInterface
      .changeColumn(tableName, columnName, {
        values: arrayOfNewValues
      });
  },
  down: function (queryInterface) {
    return queryInterface
      .changeColumn(tableName, columnName, {
        values: arrayOfOldValues
      });
  }
};

答案 2 :(得分:0)

如果要重新添加,则需要删除该类型。如果没有别的,那么在向下迁移中很有用。

Queries

答案 3 :(得分:0)

扩展briangonzalez答案,您还需要一个向下功能来撤消迁移:

'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);
  }
};

更改 enum_type_name new_value 以满足您的需求。

相关问题