【问题标题】:Problems when updating Symfony 4.4 DoctrineMigrationsBundle from 2 to 3将 Symfony 4.4 DoctrineMigrationsBundle 从 2 更新到 3 时出现问题
【发布时间】:2020-07-02 11:37:10
【问题描述】:

我正在运行 Symfony 4.4.8,我想更新我的项目。于是我跑了:

composer update

它确实自动将 DoctrineMigrationsBundle (https://packagist.org/packages/doctrine/doctrine-migrations-bundle) 从 2.1.2 更新到 3.0.1。

Composer 一开始失败了,因为教义迁移.yaml 与 DoctrineMigrationsBundle 3.0.1 不兼容,所以我跑了:

composer recipes:install --force -v
composer install

但是:DoctrineMigrationsBundle v 3 的配置似乎完全不同,不再使用“migrations_versions”SQL 表,而是使用了新的“doctrine_migrations_versions”表和新的迁移目录('%kernel.project_dir%/ migrations' 而不是 '%kernel.project_dir%/src/Migrations')。

这意味着每次你这样做:

 php bin/console doctrine:migrations:diff

您将进入迁移:

 $this->addSql('DROP TABLE migration_versions');

我在https://symfony.com/doc/master/bundles/DoctrineMigrationsBundle/index.html 读到,您可以像这样手动在教义迁移.yaml 中设置表名:

doctrine_migrations:
    storage:
        table_storage:
            'table_name': 'doctrine_migrations'

但这没有用,因为 v 3 表有一个额外的列“execution_time”,并且在“version”列中添加了一个命名空间(例如“DoctrineMigrations\Version20200702112735.php”)。所以这两个表是不兼容的。

我在任何地方都找不到有关将 DoctrineMigrationsBundle 从 v2 正确升级到 v3 的任何信息。

我必须说我对此感到惊讶,我认为“作曲家更新”是安全的。显然,如果无法升级,其中一个 symfony 包没有自动添加版本限制。

那我该怎么办?我应该让作曲家再次降级 DoctrineMigrationsBundle 吗?还是有什么方法可以让 DoctrineMigrationsBundle 从 v2 升级到 v3 才能正常工作?

【问题讨论】:

标签: symfony doctrine-orm composer-php symfony4 doctrine-migrations


【解决方案1】:

我认为这里解释了一切:https://github.com/doctrine/migrations/blob/master/UPGRADE.md

如果您已经更新了捆绑配置,只需运行该命令:

bin/console doctrine:migrations:sync-metadata-storage

它应该可以工作。

【讨论】:

  • 如果你在之前/之后查看 migrations.php,这两种配置都已经使用了表学说迁移版本,而不是 Symfony 学说迁移包中的学说迁移。它没有说明如何将此表迁移到具有附加列的新表。
猜你喜欢
  • 1970-01-01
  • 2021-06-29
  • 1970-01-01
  • 2020-03-28
  • 2019-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-03
相关资源
最近更新 更多