与仅运行模式更新相比,Doctrine Migrations 的实际优势是什么?
安全? orm:schema-tool:update
命令(Symfony 中的 doctrine:schema:update
)警告
This operation should not be executed in a production environment.
但这是为什么呢?当然,它可以删除数据,但迁移也可以。
灵活性?
我想我可以调整我的迁移来添加列默认值之类的东西,但这通常不起作用,因为 Doctrine 会注意到架构和下一个差异中的代码之间的差异,并践踏您的更改。
最佳答案
当您使用 schema-tool
,不会保留数据库修改的历史记录,并且在生产/登台环境中这是一个很大的缺点。
假设您在一个实时项目中有一个复杂的数据库结构。在下一个变更集中,您必须以某种方式更改数据库。例如,您用户的联系电话需要以不同的格式存储,而不是 VARCHAR
, 但三个 SMALLINT
国家代码、区号和电话号码列。
好吧,找出一个查询来获取当前数据,将其分成三个值并将它们插入回去并不难。这就是迁移发挥作用的时候:您可以创建新字段,然后进行转换,最后删除之前保存数据的字段。
甚至更多!当您需要撤消迁移中引入的更改时,您甚至可以描述向后过程(down
迁移)。假设某个地方有人严重依赖 VARCHAR
的格式。字段,现在您已经更改了结构,他的一段代码没有按预期工作。所以,你运行 migration:down
,一切都会恢复。在这种特定情况下,您只需带回旧的 VARCHAR
列并将值连接回去,然后删除字段。
Doctrine 的迁移工具基本上为您完成了大部分工作。当您比较架构时,它会生成所有必需的 up
的和 down
's,因此您唯一需要做的就是处理应用迁移时可能损坏的数据。
此外,迁移还可以让团队中的其他开发人员了解何时应该更新他们的架构。只需 schema-tool
,你的队友必须跑 doctrine:schema:update
每次他们拉动时,`因为他们不知道模式是否真的改变了。
使用迁移时,您总是会看到迁移文件夹中有一些更新,这意味着您需要更新架构。
关于symfony - 学说架构更新或学说迁移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23339711/