symfony中查看迁移状态应执行php bin/console doctrine:migrations:status命令,它会列出全部迁移文件并用✔标识已执行项,同时显示已执行/未执行数量及最新迁移版本;也可用doctrine:migrations:versions --show-versions筛选未执行项。

在 Symfony 4 中,迁移(Migrations)由 Doctrine Migrations 管理,默认使用 doctrine/doctrine-migrations-bundle。要查看哪些迁移已执行、哪些尚未执行,主要通过命令行工具操作,无需手动查数据库表(虽然底层确实记录在 doctrine_migration_versions 表中)。
查看所有迁移状态(已执行 vs 未执行)
运行以下命令,会清晰列出全部迁移文件,并用 ✔ 或空格标识是否已执行:
php bin/console doctrine:migrations:status
输出示例:
== Configuration
>> Name: DoctrineMigrations
>> Database Driver: pdo_mysql
>> Database Host: 127.0.0.1
>> Database Name: app_db
>> Configuration Source: manually configured
== Migration Status
>> Number of migrations: 5
>> Number of executed migrations: 3
>> Number of non-executed migrations: 2
>> Latest migration: 20230101120000_add_user_email_unique
== Migration Versions
20221201090000_create_user_table ✔
20221205143000_add_user_status_column ✔
20221210112000_create_post_table ✔
20230101120000_add_user_email_unique
20230115084500_fix_timestamps
只看未执行的迁移
如果只想快速定位待执行项,用这个命令更直接:
php bin/console doctrine:migrations:versions --show-versions
它会列出所有版本号,并标注 Not executed 或 Executed。也可配合 grep 过滤:
php bin/console doctrine:migrations:versions --show-versions | grep "Not executed"
查看已执行迁移的详细时间与 SQL
想确认某次迁移何时执行、是否出错,可查数据库中的记录表:
默认表名为 doctrine_migration_versions,字段包括:
-
version:迁移类名(如20221201090000_create_user_table) -
executed_at:执行时间戳 -
execution_time:耗时(毫秒) -
is_synced:是否与代码同步(通常为 1)
直接查表(如用 MySQL 客户端或 phpMyAdmin)即可获得最原始记录。
常见注意事项
- 迁移状态依赖
doctrine_migrations.yaml配置中的table_name,若自定义过表名,需对应查询 - 执行过
doctrine:migrations:sync-metadata-storage后,才会确保元数据表存在且结构正确 - 若迁移文件被手动删改但数据库已有记录,状态可能不一致,此时建议先备份再运行
--dry-run测试











