具有多个实体的Doctrine2 OneToMany

时间:2016-07-02 12:16:00

标签: symfony doctrine-orm doctrine relationship entity-relationship

我有三种用户,每个用户都有一些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继承)将受到高度赞赏。

1 个答案:

答案 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 { ... }