当我更改模型和迁移文件并运行sequelize db:migrate:undo然后再序列化db:migrate时,不会在数据库表上进行更改。
相反,更改会影响最后一个迁移文件/模型文件。
答案 0 :(得分:-1)
此问题与此处的问题类似:How to add column in sequelize existing model。
但是无论如何,迁移只是使用queryInterface方法的一组指令,因此,例如,使用cli生成迁移时使用的默认方法是(createTable)方法。
如果要以任何方式更改表,则需要使用另一种方法,例如(renameColumn:重命名列,changeColumn:更改列数据类型,.. etc)
例如,如果我想将一个已存在(已迁移)name
表上名为firstName
的列重命名为Users
,我将创建一个新的迁移文件来对其进行修改,看起来像这样:
'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,
})
}
};
这是在向同一表Users
中添加新列(姓)的示例:
'use strict';
module.exports = {
up: (queryInterface, Sequelize) => {
return queryInterface.addColumn('Users', 'lastName', {
type: Sequelize.STRING
})
},
down: (queryInterface, Sequelize) => {
return queryInterface.removeColumn("Users", "lastName")
}
};