我有三种用户,每个用户都有一些FiscalData
并且链接到UserCredential
条目。
其中包含:
UserX(X = 1,2,3)有两个FK引用
FiscalData
和UserCredential
表。
使用Doctrine2,阅读文档http://doctrine-orm.readthedocs.io/projects/doctrine-orm/en/latest/reference/association-mapping.html,我认为需要 MappedSuperClass 模式。
我还阅读了以下问题:
Doctrine 2 - One-To-Many with multiple Entities
Many-To-One with multiple target entities
Doctrine2, Symfony2 - oneToOne with multiple entities?
但在文档中明确指出
映射的超类不能是实体,它不是可查询的,并且由映射的超类定义的持久关系必须是单向的(仅具有拥有方)。这意味着根本不可能在映射的超类上进行一对多关联。此外,只有当映射的超类目前仅在一个实体中使用时,才能实现多对多关联。为了进一步支持继承,必须使用单个或连接表继承功能。
那么,如何实现我尝试实现的目标,即UserX和FiscalData
/ UserCredential
之间的双向关系? (因此,通过Doctrine,我可以获得UserCredential并检查它所关联的配置文件类型)
任何完整的最小代码示例,说明如何强制执行关系我正在寻找(而不仅仅是文档中显示的MappedSuperClass继承)将受到高度赞赏。
答案 0 :(得分:0)
使用抽象实体而不是MappedSuperClass。单表通常是要走的路,除非你确定你想要课/表。
<?php
/**
* @ORM\Entity
* @ORM\InheritanceType("SINGLE_TABLE")
* @ORM\DiscriminatorColumn(name="discr", type="string")
* @ORM\DiscriminatorMap({
* "mentor" = "Mentor",
* "protege" = "Protege"
* })
*/
abstract class User { ... }