我正在使用Symfony和Doctrine。在项目的中间,我需要实现Doctrine迁移,因为数据库更改太多,而且我需要一种更好的方法来处理它。 当产品上已有数据并且需要保留在那里并且不被触碰时,如何从迁移开始的最佳方法是什么?
我的计划将是:
在我的测试系统上
通过这种方式,我拥有实体中的所有结构,但不会破坏实时数据。
你怎么办?
答案 0 :(得分:1)
如果已经有一些生产数据,那么最好的办法是从当前架构状态执行make:migration
或doc:mig:diff
。那将只生成将更新新更改的必要的sql,但没有其他内容。您的第一个迁移版本只会将sql从当前状态更新,而不是从开始更新。
此外,一旦采用了此方法,就必须在迁移下进行每个数据库修改。例如,如果您需要添加一个不可为空的字段,则通常添加一个不为null的新字段,然后使用默认值或计算所得的值填充该字段的所有行,然后更改表以使该字段不可为空。迁移将生成一些样板代码,以使您的生活更轻松,但它也需要开发团队的大量照顾。始终首先在可以摆脱的数据库中对其进行测试。并且您将遇到FK约束和许多其他问题,但是基本上您必须使用SQL解决它们。
答案 1 :(得分:1)
这里有旧线程,但是在这种情况下我该怎么做:
这将使您回到开始的位置,但是通过初始迁移就可以从零开始构建架构。