最推荐使用 maker bundle 的 make:entity 命令创建实体,它自动生成符合 doctrine 规范的 php 类、注解、getter/setter 和映射配置;手动定义需严格遵循命名空间、orm 注解及类型规范;关联关系可通过交互式命令添加;最后必须执行 make:migration 和 migrate 同步数据库。

用 Symfony 创建实体,最推荐的方式是使用 Maker Bundle 的 make:entity 命令——它自动生成符合 Doctrine 规范的 PHP 类、注解、getter/setter 和数据库映射配置,省去手写模板和校验细节的麻烦。
✅ 用命令行快速生成实体
确保已安装 Maker Bundle(开发环境):
composer require symfony/maker-bundle --dev
运行生成命令:
php bin/console make:entity Product
终端会交互式引导你添加字段,例如:
- 字段名:
name,类型选string,长度填255 - 字段名:
price,类型选float,是否可空?选no - 字段名:
createdAt,类型选datetime_immutable,并勾选「为该字段添加 ORM 映射」
完成后,实体文件自动创建在 src/Entity/Product.php,含完整 Doctrine 注解和标准方法。
? 手动定义实体(适合定制或学习)
若需完全控制结构(比如加自定义逻辑、跳过 maker 或适配旧项目),可手动创建:
- 在
src/Entity/下新建User.php - 声明命名空间:
namespace App\Entity; - 加上 Doctrine 实体注解:
#[ORM\Entity(repositoryClass: UserRepository::class)] - 每个属性配
#[ORM\Id]、#[ORM\GeneratedValue]、#[ORM\Column]等 - 补全 getter/setter 方法(可用 IDE 自动生成,或运行
php bin/console make:entity --regenerate)
注意:字段类型要与 Doctrine 类型对齐(如 string → varchar,datetime_immutable → datetime),否则迁移会失败。
? 添加关联关系(一对多、多对一等)
Maker Bundle 支持交互式添加关系:
- 再次运行
php bin/console make:entity,输入已有实体名(如Product) - 添加新字段时,类型选
relation,然后选择目标实体(如Category) - 指定关系类型(
ManyToOne/OneToMany/ManyToMany)和是否生成反向属性
生成后,会自动更新双方实体、添加 #[ORM\JoinColumn] 和集合管理方法(如 addProduct()),并建议你运行 make:migration 同步数据库。
? 同步到数据库(别漏这步)
实体只是 PHP 类,不会自动建表。需通过 Doctrine 迁移落地:
- 生成迁移文件:
php bin/console make:migration - 执行迁移:
php bin/console doctrine:migrations:migrate
此时数据库中才会出现对应表。后续字段变更也应走迁移流程,而非直接改表结构。











