设计实体模型来管理多个双向关系

时间:2013-06-20 09:37:13

标签: php oop doctrine-orm

我正在尝试找到设计模型中实体之间关系的最佳方法。我会试着清楚地解释一下。

想象一下以下的Doctrine2实体:

class ImageHistory
{
    /**
     * @var Image
     */
    protected $current;

    /**
     * @var \Doctrine\Common\Collections\Collection
     */
    protected $old;
}

class Dog
{
    protected $name;

    /**
     * @var ImageHistory
     */
    protected $imageHistory;
}

class Cat
{
    protected $name;

    /**
     * @var ImageHistory
     */
    protected $imageHistory;
}

我想建立两个一对多的双向学说关系,其中CatDog是关系的拥有方。 CatDog类都有此实体配置:

manyToOne:
    imageHistory:
        targetEntity: ImageHistory
        joinColumn:
            name: image_history_id
            referencedColumnName: id

如何表示关系的另一面?

oneToMany:
    owner:
        targetEntity: <What can I write here?>
        mappedBy: imageHistory

我想象一个CatDog继承Animal实体类的解决方案,因此我可以将ManyToOne关系移动到Animal类并放置{{1} }作为OneToMany关系的targetEntity。但是,如果我有一个新的Animal实体并且:SoundHistoryCat和新的DogCar类必须与它有关系,则问题会重新出现。< / p>

A不能只将Boat添加为SoundHistory类的oneToMany关系,因为AnimalCar不会从中继承。所以我仍然无法在Boat实体中填充我的OneToMany关系的targetEntity

在这种情况下设计实体模型的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

Many-To-One Relation是单向的,所以你无法代表另一方。

另外,如果你真的想把Dogs和Cats存储在同一个表中,你应该考虑创建一个超级实体。