用途:在 Symfony 项目中映射 Doctrine 实体关系(ManyToOne、OneToMany、ManyToMany、OneToOne)并选择 owning side,适用于关系不持久化、inverse 集合 contains() 变慢、需要拆分多实体管理器等场景。
主要能力与做法:选定 owning side(持有外键,ManyToOne 配 inversedBy)与 inverse side(OneToMany 配 mappedBy);在构造函数中用 ArrayCollection 初始化集合并编写保持两侧同步的 addX() 与 removeX() 方法;聚合一起保存时用 cascade: ['persist'],仅真正组合关系用 orphanRemoval: true;大 inverse 集合标记 fetch: 'EXTRA_LAZY',或从 owning side 测试成员关系;在读取关系的用例中加 fetch join 以避免 N+1 查询;多实体管理器时每个实体集归一个管理器,并通过 ManagerRegistry 获取仓库。
限制与注意:Doctrine 只持久化 owning side 持有的内容,必须设置 ManyToOne 引用;大集合避免 cascade: ['remove'](逐行 DELETE);共享实体绝不用 orphanRemoval;关系不能跨两个实体管理器;非默认实体管理器用 ManagerRegistry::getRepository(Entity::class, 'name') 获取仓库。输出契约包含实体映射及 owning/inverse 侧、cascade 与 orphan 决策、大集合与热路径的抓取策略、doctrine:schema:validate 结果。详细实现见 reference.md;收费、价格、平台与效果等未提供。