symfony 3 的数据库模型完全依托 doctrine 实现,doctrine 是其默认集成的 orm 层,实体类即数据库模型,通过注解映射表结构与关联关系,并由 doctrine 工具自动同步数据库。

Symfony 3 的数据库模型完全依托 Doctrine 实现,Doctrine 不是可选插件,而是 Symfony 3 官方绑定的、默认集成的对象关系映射(ORM)层。
Doctrine 是 Symfony 3 的数据库操作核心
Symfony 3 自带 Doctrine ORM 和 DBAL(数据库抽象层)作为标准组件。项目初始化后,doctrine/orm 和 doctrine/doctrine-bundle 已预装,所有数据库交互——建表、读写、关联、迁移——都通过 Doctrine 的实体(Entity)、实体管理器(EntityManager)和仓库(Repository)完成,而非原生 SQL 或 PDO 手写逻辑。
实体类即数据库模型
在 Symfony 3 中,“数据库模型”不是独立概念,它直接体现为 PHP 类(实体),并用 Doctrine 注解声明映射规则:
- 每个实体类对应一张数据库表(如
User→user表) -
@ORM\Entity标记该类为持久化对象 -
@ORM\Column定义字段类型、长度、是否为空等 -
@ORM\Id+@ORM\GeneratedValue指定主键及生成策略
这种设计让开发者以面向对象方式建模业务数据,无需先画 ER 图再写 SQL。
数据库结构与代码同步由 Doctrine 管理
Symfony 3 借助 Doctrine 提供的命令行工具实现模型与数据库的一致性:
-
php bin/console doctrine:database:create创建库 -
php bin/console doctrine:schema:update --force根据实体生成或更新表结构 -
php bin/console doctrine:migrations:diff生成迁移文件,支持版本化演进
这意味着修改一个实体属性(比如加个 @ORM\Column(type="string", length=255)),就能驱动整个数据库结构变更,避免手动维护 SQL 脚本。
关联关系由 Doctrine 统一建模
Symfony 3 中的一对多、多对一、一对一等关系,全部通过 Doctrine 注解定义,并自动处理外键、级联、懒加载等行为:
-
@ORM\OneToMany和@ORM\ManyToOne构成双向关联 -
inversedBy与mappedBy明确关系维护方 - 默认惰性加载(Lazy Loading)避免 N+1 查询问题
例如:一个 Post 实体拥有多个 Comment,只需在 Post 类中声明 @ORM\OneToMany(targetEntity="Comment", mappedBy="post"),Doctrine 就能理解并生成对应 SQL 关系,同时提供 $post->getComments() 这样的自然调用接口。











