最简单的方式是用 symfony 的 maker bundle 命令行工具,一步生成实体类、字段、关系和数据库迁移文件,全程交互式操作,不用手写注解或 yaml。

用 make:entity 快速建模
这是 Symfony 3.4+(含兼容 Symfony 3.3 的扩展包)推荐的主流方式。确保已安装 symfony/maker-bundle(如未安装,运行 composer require --dev symfony/maker-bundle)。
- 运行
php bin/console make:entity - 输入实体名,比如
Article - 按提示逐个添加字段:
title(type: string, length: 255)、content(type: text)、published(type: boolean)、createdAt(type: datetime_immutable) - 需要关联时直接输字段名如
category,选择关系类型(如 ManyToOne),再选目标实体 - 回车结束,自动生成
src/Entity/Article.php和完整 getter/setter
一键生成并执行数据库迁移
实体建好后,Doctrine 能自动对比当前模型与数据库状态:
- 生成迁移文件:
php bin/console make:migration - 执行迁移建表:
php bin/console doctrine:migrations:migrate - 命令会自动创建对应数据表,并带好字段类型、索引、外键约束(如设置了 relation)
已有数据库?反向生成也只需两步
如果数据库表已经存在,不想从头设计,可用 Doctrine 反向工程:
- 先让 Doctrine 读取表结构:
php bin/console doctrine:mapping:import --force App annotation(注意:Symfony 3 中 Bundle 名通常是App或AppBundle,按实际调整) - 再生成 PHP 实体类:
php bin/console doctrine:mapping:convert annotation ./src/(部分版本需配合doctrine:generate:entities补全方法) - 生成后建议手动检查字段类型(如
datetimevsdatetime_immutable)和关系映射是否准确
关键配置别漏掉
所有操作的前提是数据库连接已配好。确认 .env 文件中 DATABASE_URL 正确,例如:
若用的是旧版 Symfony 3.3 且基于 parameters.yml,则需检查 app/config/parameters.yml 中的 database_* 参数是否填写完整。











