gpt4 book ai didi

php - Symfony 4 : how to safely 'join' migrations together?/删除第一个和最后一个之间的迁移?

转载 作者:行者123 更新时间:2023-12-03 16:50:56 24 4
gpt4 key购买 nike

我最近在调整数据库,发现在现有2个数据库的基础上进行了5次迁移。所以总共有7个,即m1,m2,...,m7。从这些5中,我只需要最新版本。所以我以为我可以删除m3,m4,m5,m6,m7并再次迁移,这将导致m3已经包含我满意的最终版本。现在,我从未做过此事,并且想知道最安全的方法是什么?

我正在使用PHPStorm。我可以手动将其删除(在PHPStorm中单击鼠标右键,然后单击“删除”),然后转到命令行并执行php bin/console doctrine:migrations:migrate吗?或者我需要做php bin/console doctrine:schema:update吗?还是这真的是个坏主意?

最佳答案

不,通常您都不应该做任何一个。首先,让我澄清一下似乎存在的误解:迁移不包含完整的数据库架构,仅包含将数据库从一个版本移植到另一个版本所必需的查询。该系统允许对数据库更改进行管理和版本控制。因此,您应该开始看到一些与此相关的问题:

  • 迁移可能取决于先前的迁移。例如。 v1添加一个实体,v2添加一个新字段。如果删除v1,则v2将被破坏,并且也需要删除。
  • 由于数据库迁移通常与更改对象模型同时进行,因此您还必须还原模型,否则会发现不存在字段的映射问题。

  • 当您尚无任何功能时,在设计阶段这可能是可以接受的。您可以使用 bin/console doctrine:migrations:execute --down <version>还原单个迁移。如果需要进行调整,通常在测试更改时完成。但是通常在尚未进行更改时。

    Doctrine使用称为 migration_versions的数据库表来跟踪迁移。通过使用日期命名它们,可以对它们进行排序并依次应用它们。每当执行迁移时,都会将迁移名称添加到该表中。当您将其回滚时,它将与迁移本身中的字段一起从表中删除。请记住,即使您可以回滚迁移,也并不意味着一切都会恢复原样。如果迁移删除了列,则将在回滚时重新创建该列,但数据将丢失。

    至于“可以做到”吗?是的。如果您真的想要,请仔细阅读 documentation并了解所有这些内容。

    因此,由于您的问题与合并迁移有关,因此让我们解决您的实际选择:
  • 我可以手动将其删除(在PHPStorm中单击鼠标右键,然后单击“删除”),然后转到命令行并执行php bin/console doctrine:migrations:migrate吗?

  • 不,这行不通。 migrate应用可用的迁移。它们将不会是任何东西,并且如所解释的那样,修订仍将在表中,并且会应用其更改。
  • 还是我需要做php bin/console doctrine:schema:update

  • 这也不会做任何事情,因为它将模型与数据库进行比较并发现它们匹配。

    无论如何,您都需要先还原它们,然后再创建一个等效的。该命令是 doctrine:migrations:diff。这会将模型与模式进行比较,并生成迁移以使数据库同步。为此,您需要首先对迁移进行 execute --down编码,否则它们将不会有任何更改,但可能会在此过程中丢失一些数据。

    如果您在团队中工作,他们将看到迁移消失。有些甚至可能落后于历史,并且没有应用所有迁移。这将很快成为管理难题。
    有一个 rollup命令(据我所知,并且从未实际使用过)从表中清除陈旧的迁移,转储完整的架构并应用它。这将是您最好的选择,但请注意,这很可能会删除您的数据。

    您也可以手动组合迁移。它们只是带有 updown方法的类。合并所有功能主体,应用清理过程并开始进行。

    现在,如果您要执行此操作,则不会有太大问题。只需用新版本替换过时的版本,并警告所有人。但是,如果您想要做的是根本不存在并且保持整洁的提交历史,那么那时候您的队友可能会想要杀死您,因为这将涉及 rewriting history。当您这样做时,他们将必须重新安排所有工作。

    如果您想这样做:
  • 进行备份
  • 尽早引入您的更改,以避免中断。如果数据库中有一些未使用的字段一段时间,直到模型提交 catch 来,就可以了。如果您做得太晚,并且某些对象需要它,则可能会迫使某人创建迁移并破坏您的迁移。
  • 正确处理(最好是第一次尝试)。在进行广泛测试之前,请不要插入。
  • 进行备份

  • console commands引用

    关于php - Symfony 4 : how to safely 'join' migrations together?/删除第一个和最后一个之间的迁移?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57100660/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com