使用Sequelize更改列类型时定义转换

时间:2018-04-06 09:23:56

标签: type-conversion migration sequelize.js

我想将列类型从BLOB更改为TEXT,我认为以某种方式指定如何处理每个字段(即使用utf8编码创建字符串)是合乎逻辑的,但是如果可以,我找不到任何地方在迁移期间定义JS转换。

1 个答案:

答案 0 :(得分:1)

当前不可能,因为底层的SQL模型不支持它。相反,您可以创建一个占位符列,将值复制过来,删除旧列,然后重命名新列。

更多信息请参见Github线程here。从线程中举一个例子:

module.exports = {
  up: async (queryInterface, Sequelize) => {
    return [
      await queryInterface.addColumn('jobs', 'matterInfo', {
        type: Sequelize.STRING(150),
        defaultValue: ''
      }),
      await queryInterface.sequelize.query(
        'UPDATE jobs SET matterInfo = CONCAT( matterNumber, " / ", matterName);'
      ),

      // remove unused fields
      await queryInterface.removeColumn('jobs', 'matterName'),
      await queryInterface.removeColumn('jobs', 'matterNumber')
    ];
  },

  down: (queryInterface, Sequelize) => {
    /*
      Add reverting commands here.
      Return a promise to correctly handle asynchronicity.

      Example:
      return queryInterface.dropTable('users');
    */
  }
};