Sequelize db:migrate 不更新模型
Sequelize db:migrate doesn't update model
我用 sequelize-cli 做了一个 table,但是我忘了添加一列:标题。
所以我生成了新的迁移:
$ sequelize migration:create --name update-notes
并将这些代码放入迁移文件中:
'use strict';
module.exports = {
up: (queryInterface, Sequelize) => {
return queryInterface.addColumn(
'Notes',
'title',
Sequelize.STRING
);
},
down: (queryInterface, Sequelize) => {
return queryInterface.removeColumn(
'Notes',
'title'
);
}
};
在 运行 迁移并检查来自数据库的 table 架构后,它有效:
$ sequelize db:migrate
但是模型还没有我新添加的列:
'use strict';
// models/notes.js
module.exports = (sequelize, DataTypes) => {
const Notes = sequelize.define('Notes', {
content: DataTypes.TEXT // NO 'TITLE' COLUMN
}, {});
Notes.associate = function(models) {
// associations can be defined here
};
return Notes;
};
我错过了什么?我应该如何将更新应用于模型文件?
此外,如果 table 中以前的数据与新的 table 模式不兼容怎么办?是否只是迁移失败,开发人员手动修复了问题?
不幸的是,对于 Sequelize 迁移,您将需要手动更新模型和迁移文件。创建新的迁移文件不会更新您的模型文件,反之亦然。尽管 Sequelize CLI 提供了一些辅助选项,但您通常需要自己确保正确定义模型文件和迁移文件。
我用 sequelize-cli 做了一个 table,但是我忘了添加一列:标题。
所以我生成了新的迁移:
$ sequelize migration:create --name update-notes
并将这些代码放入迁移文件中:
'use strict';
module.exports = {
up: (queryInterface, Sequelize) => {
return queryInterface.addColumn(
'Notes',
'title',
Sequelize.STRING
);
},
down: (queryInterface, Sequelize) => {
return queryInterface.removeColumn(
'Notes',
'title'
);
}
};
在 运行 迁移并检查来自数据库的 table 架构后,它有效:
$ sequelize db:migrate
但是模型还没有我新添加的列:
'use strict';
// models/notes.js
module.exports = (sequelize, DataTypes) => {
const Notes = sequelize.define('Notes', {
content: DataTypes.TEXT // NO 'TITLE' COLUMN
}, {});
Notes.associate = function(models) {
// associations can be defined here
};
return Notes;
};
我错过了什么?我应该如何将更新应用于模型文件?
此外,如果 table 中以前的数据与新的 table 模式不兼容怎么办?是否只是迁移失败,开发人员手动修复了问题?
不幸的是,对于 Sequelize 迁移,您将需要手动更新模型和迁移文件。创建新的迁移文件不会更新您的模型文件,反之亦然。尽管 Sequelize CLI 提供了一些辅助选项,但您通常需要自己确保正确定义模型文件和迁移文件。