如何修改续集迁移
How to modify sequelize migrations
当我更改我的模型和迁移文件并 运行 sequelize db:migrate:undo 然后 sequelize db:migrate 时,不会对数据库进行更改 table.
相反,更改会影响最后一个迁移文件/模型文件。
这个问题与这里的这个问题类似:。
但无论如何,迁移只是一组使用 queryInterface 方法的指令,因此例如,当您使用 cli 生成迁移时使用的默认方法是 (createTable) 方法。
如果您想以任何方式更改 table,您需要使用另一种方法,例如(renameColumn: to rename a column, changeColumn:更改列数据类型,..等)
例如,如果我想将一个名为 name
的列重命名为 firstName
(已迁移)Users
table,我将创建一个新的迁移文件修改它,它看起来像这样:
'use strict';
module.exports = {
up: (queryInterface, Sequelize) => {
return queryInterface.renameColumn('Users', 'name', 'firstName', {
type: Sequelize.STRING,
})
},
down: (queryInterface, Sequelize) => {
return queryInterface.renameColumn('Users', 'firstName', 'name', {
type: Sequelize.STRING,
})
}
};
这是在 添加新列 (lastName) 到相同 table Users
:
的示例中
'use strict';
module.exports = {
up: (queryInterface, Sequelize) => {
return queryInterface.addColumn('Users', 'lastName', {
type: Sequelize.STRING
})
},
down: (queryInterface, Sequelize) => {
return queryInterface.removeColumn("Users", "lastName")
}
};
当我更改我的模型和迁移文件并 运行 sequelize db:migrate:undo 然后 sequelize db:migrate 时,不会对数据库进行更改 table.
相反,更改会影响最后一个迁移文件/模型文件。
这个问题与这里的这个问题类似:
但无论如何,迁移只是一组使用 queryInterface 方法的指令,因此例如,当您使用 cli 生成迁移时使用的默认方法是 (createTable) 方法。
如果您想以任何方式更改 table,您需要使用另一种方法,例如(renameColumn: to rename a column, changeColumn:更改列数据类型,..等)
例如,如果我想将一个名为 name
的列重命名为 firstName
(已迁移)Users
table,我将创建一个新的迁移文件修改它,它看起来像这样:
'use strict';
module.exports = {
up: (queryInterface, Sequelize) => {
return queryInterface.renameColumn('Users', 'name', 'firstName', {
type: Sequelize.STRING,
})
},
down: (queryInterface, Sequelize) => {
return queryInterface.renameColumn('Users', 'firstName', 'name', {
type: Sequelize.STRING,
})
}
};
这是在 添加新列 (lastName) 到相同 table Users
:
'use strict';
module.exports = {
up: (queryInterface, Sequelize) => {
return queryInterface.addColumn('Users', 'lastName', {
type: Sequelize.STRING
})
},
down: (queryInterface, Sequelize) => {
return queryInterface.removeColumn("Users", "lastName")
}
};