【发布时间】: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 才能正常工作?
【问题讨论】:
-
github.com/doctrine/migrations/blob/master/UPGRADE.md ?从理论上讲,只有配置发生了变化并且需要更新,其他一切都应该按原样运行。
-
我已经降级到 v2(参见 github.com/doctrine/DoctrineMigrationsBundle/issues/301),它又可以工作了。
-
请查看相关步骤的文档。另外,请不要使用不相关的标签——这不是 Composer 或 Symfony 的问题
-
@NicoHaase 我同意这不是作曲家的问题,但它与 Symfony 有关。 Symfony 使用 Doctrine Migrations Bundle (packagist.org/packages/doctrine/doctrine-migrations-bundle) 中的配方,以便将其集成到不同于原始 Doctrine 配置的 Symfony 项目中。配方中没有从 v2 到 v3 的更新信息。
标签: symfony doctrine-orm composer-php symfony4 doctrine-migrations