Sequelize迁移应该更新模型文件吗?

时间:2018-03-07 20:56:30

标签: sequelize.js sequelize-cli

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

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

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

updateEmail迁移

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,
      });
    },
};

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

1 个答案:

答案 0 :(得分:10)

  

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

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

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

社区建议/解决方案:

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

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

<强>结论:

  

Sequelize迁移应该更新模型文件吗?

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

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