教义的迁移从项目的中间开始

时间:2018-07-19 20:47:53

标签: symfony doctrine database-migration

我正在使用Symfony和Doctrine。在项目的中间,我需要实现Doctrine迁移,因为数据库更改太多,而且我需要一种更好的方法来处理它。 当产品上已有数据并且需要保留在那里并且不被触碰时,如何从迁移开始的最佳方法是什么?

我的计划将是:

在我的测试系统上

  • 删除所有表格
  • 运行php bin /控制台学说:migrations:diff
  • 新的自动迁移文件,我将保留当前状态的所有表结构
  • 转到表“ migration_versions”并添加此迁移的ID,因此第一次运行时将跳过该迁移 迁移
  • 运行迁移php bin /控制台学说:migrations:migrate

通过这种方式,我拥有实体中的所有结构,但不会破坏实时数据。

你怎么办?

2 个答案:

答案 0 :(得分:1)

如果已经有一些生产数据,那么最好的办法是从当前架构状态执行make:migrationdoc:mig:diff。那将只生成将更新新更改的必要的sql,但没有其他内容。您的第一个迁移版本只会将sql从当前状态更新,而不是从开始更新。

此外,一旦采用了此方法,就必须在迁移下进行每个数据库修改。例如,如果您需要添加一个不可为空的字段,则通常添加一个不为null的新字段,然后使用默认值或计算所得的值填充该字段的所有行,然后更改表以使该字段不可为空。迁移将生成一些样板代码,以使您的生活更轻松,但它也需要开发团队的大量照顾。始终首先在可以摆脱的数据库中对其进行测试。并且您将遇到FK约束和许多其他问题,但是基本上您必须使用SQL解决它们。

答案 1 :(得分:1)

这里有旧线程,但是在这种情况下我该怎么做:

  1. 备份dev数据库(结构和数据,但表创建语句受检查保护,因此仅在不存在的情况下才创建)
  2. 删除所有表,使数据库为空
  3. 生成迁移(由于数据库为空,因此生成的迁移将构成生成整个架构所需的所有命令)
  4. 运行刚刚生成的迁移以构建架构
  5. 从转储导入测试数据

这将使您回到开始的位置,但是通过初始迁移就可以从零开始构建架构。