如何在Symfony中使用Doctrine类获取当前的Doctrine migration版本号?
获取当前Doctrine迁移版本的官方方法
存在官方封装的方法,无需自行编写原生SQL查询。
场景1:单独使用Doctrine Migrations库
通过Doctrine\Migrations\Metadata\Storage\MetadataStorage类的getCurrentVersion()方法即可直接获取最新已执行的迁移版本,该方法底层封装了你提到的原生查询逻辑,是官方推荐的实现方式。
示例代码:
use Doctrine\Migrations\DependencyFactory; use Doctrine\Migrations\Metadata\Storage\MetadataStorage; // 已完成Migrations配置初始化、构建好DependencyFactory实例 $dependencyFactory = DependencyFactory::fromConnection($migrationConfig, $dbConnection); $metadataStorage = $dependencyFactory->getMetadataStorage(); // 获取当前最新版本 $latestMigration = $metadataStorage->getCurrentVersion(); // 提取版本号字符串 $latestVersionStr = $latestMigration->getVersion();
场景2:Symfony框架使用DoctrineMigrationsBundle
无需自行实例化依赖类,直接注入Doctrine\Migrations\Metadata\Storage\MetadataStorage服务即可调用:
use Doctrine\Migrations\Metadata\Storage\MetadataStorage; class MigrationVersionService { public function __construct( private MetadataStorage $metadataStorage ) {} public function getLatestExecutedVersion(): ?string { $latestVersion = $this->metadataStorage->getCurrentVersion(); // 无任何迁移执行记录时返回null return $latestVersion->isExecuted() ? $latestVersion->getVersion() : null; } }
注意事项
- 以上方法仅适用于Doctrine Migrations 3.0及以上版本,低于3.0的老版本可通过
Doctrine\Migrations\Version\AliasResolver类的resolveVersionAlias('current')方法获取版本号。 - 如果项目配置了多个迁移组,可以调用
MetadataStorage::getAvailableVersions()拿到所有已执行的迁移记录,再按分组筛选对应最新版本即可。
内容的提问来源于stack exchange,提问作者michnovka
相关产品推荐
相关产品推荐

