续集迁移是否应该更新模型文件?



续集迁移是否应该使您的模型文件与您的数据库保持一致?

我使用续集 cli 来引导一个简单的项目并创建一个模型node_modules/.bin/sequelize model:generate --name User --attributes email:string。我迁移了它没有问题。

然后,我创建了以下迁移文件,以向用户电子邮件属性添加 notNull 约束。

更新电子邮件迁移

const models = require("../models")
module.exports = {
up: (queryInterface, Sequelize) => {
return queryInterface.changeColumn(models.User.tableName, 'email',{
type: Sequelize.STRING,
allowNull: false,
});
},
down: (queryInterface, Sequelize) => {
return queryInterface.changeColumn(models.User.tableName, 'email',{
type: Sequelize.STRING,
});
},
};

数据库架构已更新以添加约束,但模型文件未添加。 有没有办法在进行迁移时自动更新模型文件?

有没有办法自动更新模型文件 进行迁移?

不幸的是,没有。续集模型和迁移之间没有同步级别,除了它们最初从sequelize model:create创建。但是,此问题中建议的工作流是更新应迁移传播到模型。这让我有点困惑,因为通常迁移是从对模型的更改自动生成的,反之亦然。

跟踪这些功能的未解决问题一直存在,您可能会发现订阅这些功能很有帮助:

  • 从模型生成初始迁移?
  • 自动创建迁移
  • 可以生成迁移以更新现有模型吗?

社区建议/解决方案:

请参阅 https://stackoverflow.com/a/28431648/8954866 如建议的那样,解决方法是在引入简单更改时使用sequelize-cli重新创建模型。但是,此方法存在明显的局限性,因为无法从 cli 定义许多配置,例如关联。

此外,确实存在一个 npm 包 sequelize-auto-migrations,它确实为生成迁移提供支持,但它似乎不是一个过于活跃的项目。

结论:

续集迁移是否应该更新模型文件?

Sequelize/sequelize-cli尚不支持此功能。

ORM 应该创建工具来自动生成迁移吗?是的,这是所需的功能,否则开发人员将被迫违反DRY等原则并在不同的文件中管理相同的逻辑。

最新更新