同一层次结构的多个实体映射到单个属性

时间:2014-03-06 20:18:53

标签: php symfony doctrine-orm

假设我有以下课程hiearchy:

/**
 * @MappedSuperclass
 */
 class Notification {

    /**
     * @ORM\ManyToOne(targetEntity="Miroc\CoreBundle\Entity\User",    inversedBy="notifications", cascade={"persist", "remove"})
     */
     private $user;
}

class UserNotification extends Notification
class ProjectNotification extends Notification

此外,假设我有一个用于映射通知的用户类:

class User {
    /**
     * @ORM\OneToMany(targetEntity="Miroc\CoreBundle\Entity\Notification", mappedBy="user", cascade={"persist", "remove"})
     */
    private $notifications;
}

现在,我想要的是:如果用户创建了X UserNotifications和Y ProjectNotifications,那么在User类中调用$ notification的getter应该返回一个长度为| X + Y |的数组。包含两种类型的所有实例。这当然也应该扩展到Notification的其他子类。

这可能,如果是这样的话怎么样?上面的例子不起作用。

1 个答案:

答案 0 :(得分:1)

我认为您可能正在寻找单表继承策略,如中所述 Doctrine Docs。我认为你可能需要添加自己的方法来组合这两个数组。

当然可以为两种类型的通知设置两个单独的实体,并将它们组合起来,但是从你的问题我假设你想要它们在一个表中。