我有一套Sequelize模型 . 我想使用迁移,而不是DB Sync .
根据this article,Sequelize CLI似乎能够做到这一点:"When you use the CLI for the model generation, you will gain the migration scripts for free as well."
如何使用现有Sequelize模型中的Sequelize CLI自动生成迁移?
我有一套Sequelize模型 . 我想使用迁移,而不是DB Sync .
根据this article,Sequelize CLI似乎能够做到这一点:"When you use the CLI for the model generation, you will gain the migration scripts for free as well."
如何使用现有Sequelize模型中的Sequelize CLI自动生成迁移?
7 回答
我最近尝试了以下方法似乎工作正常,虽然我不是100%确定是否可能有任何副作用:
使用
sequelize db:migrate
运行上面的迁移时,我的控制台说:所有表都在那里,一切(至少看起来)都按预期工作 . 如果正确定义,即使所有关联都在那里 .
另一种解决方案是将数据定义放入单独的文件中 .
我们的想法是将模型和迁移的通用数据写入单独的文件,然后在迁移和模型中都需要它 . 然后在模型中我们可以添加验证,而迁移已经很好了 .
为了不用大量的代码弄乱这篇文章我写了一个GitHub的要点 .
在这里看到:https://gist.github.com/igorvolnyi/f7989fc64006941a7d7a1a9d5e61be47
您无法为现有模型创建迁移脚本 .
资源:
Tutorial video on migrations .
Link to a possible workaround
如果采用经典方式,则必须通过CLI重新创建模型:
它会生成这些文件:
models/myuser.js:
migrations/20150210104840-create-my-user.js:
您现在可以使用npm包sequelize-auto-migrations自动生成迁移文件 . https://www.npmjs.com/package/sequelize-auto-migrations
使用sequelize-cli,用你的项目初始化
创建模型并将其放入模型文件夹中 .
安装sequelize-auto-migration:
使用创建初始迁移文件
运行迁移:
您还可以从现有数据库自动生成模型,但这超出了问题的范围 .
如果您不想从头开始重新创建模型,可以使用以下CLI命令手动生成迁移文件:
sequelize migration:generate --name [name_of_your_migration]
这将生成一个空白的框架迁移文件 . 虽然它不会将模型结构复制到文件中,但我发现它比重新生成所有内容更容易,更清晰 . 注意:确保从迁移目录的包含目录运行该命令;否则CLI将为您生成新的迁移目录
我创建了一个小工作"migration file generator" . 它使用
sequelize db:migrate
创建完美正常的文件 - 即使使用外键!你可以在这里找到它:https://gist.github.com/manuelbieh/ae3b028286db10770c81
我在一个包含12种不同型号的应用程序中进行了测试:
STRING,TEXT,ENUM,INTEGER,BOOLEAN,FLOAT作为DataTypes
外键约束(甚至互惠(用户所属于团队,团队属于用户作为所有者))
索引包含
name
,method
和unique
属性虽然它不会自动生成,但是对模型更改生成新迁移的一种方法是:(假设您正在使用库存sequelize-cli文件结构,其中迁移和模型位于同一级别)
sequelize migration:create
”生成一个)具有以下代码:对用户模型进行更改 .
从数据库中删除表 .
撤消所有迁移:
sequelize db:migrate:undo:all
重新迁移以在db中保存更改 .
sequelize db:migrate