迁移在指定的列和索引列之后添加列
我想通过迁移添加列后,某一列还索引它(正常的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'); } };
你可以在选项after
或before
添加一列指定的列。
'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'); } };
据我所知,没有办法通过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添加新列,并将其放在您select的列之后:
ALTER TABLE UserDetails ADD COLUMN user_id VARCHAR(50) AFTER some_column;