Doctrine架构更新或Doctrine迁移

Tam*_*lyn 28 database-schema symfony doctrine-orm

仅仅运行架构更新,Doctrine Migrations有哪些实际优势?

安全?

orm:schema-tool:update命令(doctrine:schema:update在Symfony中)发出警告

不应在生产环境中执行此操作.

但为什么会这样呢?当然,它可以删除数据,但迁移也是如此.

灵活性?

我认为我可以定制我的迁移以添加列默认值之类的东西,但这通常不起作用,因为Doctrine会注意到架构和下一个差异上的代码之间的差异并踩踏你的更改.

kix*_*kix 45

当您使用时schema-tool,不保留数据库修改的历史记录,并且在生产/暂存环境中,这是一个很大的缺点.

假设您在实时项目中有一个复杂的数据库结构.在下一个变更集中,您必须以某种方式更改数据库.例如,您的用户的联系电话需要以不同的格式存储,而不是VARCHARSMALLINT列,用于国家/地区代码,区号和电话号码.

好吧,找出一个可以获取当前数据的查询并将其分成三个值并将其插回来并不难.这是迁移发挥作用的时候:您可以创建新字段,然后进行转换,最后删除之前保存数据的字段.

还有更多!down当您需要撤消迁移中引入的更改时,甚至可以描述向后进程(迁移).让我们假设某个地方某人严重依赖于该VARCHAR字段的格式,现在您已经改变了结构,他的代码片段没有按预期工作.所以,你运行migration:down,一切都恢复.在这种特定情况下,您只需返回旧VARCHAR列并将值连接回来,然后删除字段.

Doctrine的迁移工具基本上可以为您完成大部分工作.当您对模式进行区分时,它会生成所有必需up的模式,down因此您只需要处理应用迁移时可能会损坏的数据.

此外,迁移可以让团队中的其他开发人员了解何时更新其架构.只有这样schema-tool,你的队友doctrine:schema:update每次拉动都必须运行,因为他们不知道架构是否真的发生了变化.

使用迁移时,您始终会看到迁移文件夹中有一些更新,这意味着您需要更新架构.

  • 非常有用的答案.非常感谢. (3认同)