代码之家  ›  专栏  ›  技术社区  ›  nnikolay

条令迁移从项目中间开始。

  •  -1
  • nnikolay  · 技术社区  · 6 年前

    我在和symfony和district合作。在项目的中间,我需要实现条令迁移,因为数据库更改太多,我需要更好的方法来处理它。 当prod上已经有了数据,并且需要保持在那里而不需要接触时,如何才能最好地从迁移开始呢?

    我的计划是:

    在我的测试系统上

    • 删除所有表
    • 运行php bin/console条令:迁移:diff
    • 新的自动迁移文件,它保存了我当前状态的所有表结构。
    • 转到“迁移版本”表并添加此迁移的ID,以便第一次运行 迁移
    • 运行迁移php bin/console条令:迁移:迁移

    这样,我就拥有了来自实体的所有结构,但我不会破坏我的实时数据。

    你在干什么?

    2 回复  |  直到 5 年前
        1
  •  1
  •   Matías Navarro Carter    6 年前

    如果已经有了一些生产数据,那么您最好的做法是 make:migration doc:mig:diff 从当前架构状态。它将只生成更新新更改所必需的SQL,而不生成其他任何更改。您的第一个迁移版本将只计算要从当前状态更新的SQL,而不是从时间的开始。

    而且,一旦您采用了这一点,您就必须在迁移下进行每个数据库修改。例如,如果需要添加一个不可为空的字段,通常会添加一个不可为空的新字段,然后用默认值或计算值填充该字段的所有行,然后更改表以使该字段不可为空。迁移将生成一些样板代码来简化您的生活,但它也需要开发团队的大量关注。总是先在您可以摆脱的数据库中测试它们。您将遇到FK约束和许多其他问题,但基本上您必须通过SQL来解决它们。

        2
  •  1
  •   Daniell    5 年前

    这里是旧线程,但在这种情况下我要做的是:

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

    这将使您回到您开始的地方,但是使用可以从零开始构建模式的初始迁移。