【问题标题】:Migrations Add Column after specified column and index column迁移在指定列和索引列之后添加列
【发布时间】:2015-10-20 14:40:59
【问题描述】:

我想在某个列也索引它之后通过迁移添加列(普通 mysql 索引不是唯一索引)。这是否可以通过迁移通过 sequelize.js 实现。如果是,如何通过迁移以及如果没有任何替代方案。

我们可以在 sequelize 迁移中执行自定义查询吗?

以下是我现有的迁移文件。

'use strict';

module.exports = {
  up: function (queryInterface, Sequelize) {
    return queryInterface.addColumn('UserDetails', 'user_id', {
      type: Sequelize.INTEGER,
    });
  },

  down: function (queryInterface, Sequelize) {
    return queryInterface.removeColumn('UserDetails', 'user_id');
  }
};

【问题讨论】:

    标签: mysql node.js sequelize.js


    【解决方案1】:

    您可以在选项中传递afterbefore 以在某些指定列之后添加列。

    'use strict';
    
    module.exports = {
    up: function (queryInterface, Sequelize) {
    return queryInterface.addColumn('UserDetails', 'user_id', {
      type: Sequelize.INTEGER,
      after: "some_column"
    });
    },
    
    down: function (queryInterface, Sequelize) {
    return queryInterface.removeColumn('UserDetails', 'user_id');
    }
    };
    

    附: after 选项仅受 MySQL 支持 https://github.com/sequelize/sequelize/blob/master/lib/query-interface.js#L495

    【讨论】:

    • 这是在哪个版本的 Sequelize 中工作的?我使用的是 CLI 版本 3.9.1,但它似乎无法正常工作。
    • 令人沮丧的是,这并没有被标记为答案,这正是我想要的。谢谢维韦克!
    • after 效果很好。我试过before 并没有运气。但是,是的,我认为这应该是公认的答案。
    • 真的很有帮助,不要相信官方doc是不正确的。也接受这个作为答案
    • @Blackjack 这仅适用于 MySQL。您实际上可以检查查询接口并查看 SQL Server 的可能性。
    【解决方案2】:

    据我所知,没有办法通过addColumn 函数来实现。

    但您可以通过原始 SQL 查询来完成:

    ALTER TABLE UserDetails CHANGE COLUMN user_id user_id VARCHAR(50) AFTER some_column;
    

    您可以像这样在迁移中运行自定义 SQL 查询:

    module.exports = {
      up: function(queryInterface, Sequelize) {
        return queryInterface.sequelize.query("ALTER TABLE UserDetails CHANGE COLUMN user_id user_id VARCHAR(50) AFTER some_column;")
      },
      down: function(queryInterface, Sequelize) {
        return true;
      }
    };
    

    由于您已经在使用自定义 SQL,您可以通过原始 SQL 添加新列并将其放在您选择的列之后:

    ALTER TABLE UserDetails ADD COLUMN user_id VARCHAR(50) AFTER some_column;
    

    【讨论】:

      猜你喜欢
      • 2020-03-08
      • 2016-09-09
      • 1970-01-01
      • 2019-10-22
      • 2012-11-21
      • 1970-01-01
      • 2017-02-17
      • 2014-05-13
      • 2013-03-30
      相关资源
      最近更新 更多