symfony - 学说架构更新或学说迁移

标签 symfony doctrine-orm database-schema

与仅运行模式更新相比,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/

相关文章:

所有子域的 Symfony2 session

cakephp - 为什么使用 Doctrine 而不是 CakePHP 的标准数据库 ORM?

optimization - zend框架2+学说: removing media with related Entity

python - bool 标志字段的模式设计(数据库架构)

linux - 从 git 中删除不存在的文件

symfony - 如何在symfony2中获取请求的路径

php - Doctrine 2 在更新时获得匹配的行数而不是受影响

php - 教义 2 中的多对多选择?

database - 是否可以重命名列?

mysql - 这些数据库模式中哪一个更可取?