生成第一个数据库迁移文件的关键是“先有实体、再比对、自动生成”,需确保数据库连接正确、Doctrine能识别src/Entity/下的带注解实体、migrations/目录存在且可写;先用make:entity创建User实体,再运行make:migration生成迁移文件,最后用migrate同步到库。

安装 Symfony 后,生成第一个数据库迁移文件的关键是“先有实体、再比对、自动生成”,而不是手写 SQL 或直接建表。整个过程依赖 Doctrine ORM 和 Doctrine Migrations 的协同工作,核心命令只有两步:改实体 → 运行 diff。
确保基础环境已就绪
在执行任何迁移命令前,必须确认以下三点都满足,否则命令会静默失败或报错:
- 数据库连接配置正确:检查 .env 文件中 DATABASE_URL 是否指向可用的数据库(例如
mysql://root:pass@127.0.0.1:3306/myapp?serverVersion=8.0) - Doctrine 已启用且能识别实体:实体类需位于
src/Entity/下,并带有完整注解,如@ORM\Entity和至少一个@ORM\Column - 迁移目录存在且可写:默认路径为
migrations/(Symfony 6+)或src/Migrations/(老版本),确保该目录存在且 Web/CLI 用户有写权限
创建你的第一个实体
用 Maker Bundle 快速生成一个标准实体,比如 User:
php bin/console make:entity User
按提示添加字段,例如:
-
name → type
string,length255 -
email → type
string,length255,勾选 “nullable” 可选 -
createdAt → type
datetime_immutable
完成后,你会看到 src/Entity/User.php 自动生成,包含完整的 Doctrine 映射注解。
生成迁移文件
运行以下任一命令(效果一致,推荐新手用第一个):
-
php bin/console make:migration—— 自动检查依赖,提示缺失时更友好 -
php bin/console doctrine:migrations:diff—— 更底层,适合脚本或 CI 环境
成功后,会在 migrations/ 目录下生成类似 Version20260602130500.php 的文件。它是一个 PHP 类,继承 AbstractMigration,其中 up() 方法会调用 $schema->createTable('user') 等方法,而非原始 SQL。
验证并执行迁移
别急着执行。先做两件事:
- 运行
php bin/console doctrine:migrations:status,确认新版本出现在 “Available migrations” 列表中,且未被标记为已执行 - 打开刚生成的迁移文件,快速扫一眼
up()方法是否符合预期(比如确实新建了user表,字段名和类型与实体一致)
确认无误后,执行:
php bin/console doctrine:migrations:migrate
控制台会提示确认,输入 y 即可将结构同步到数据库。


















