我已经阅读了Doctrine 2 Inheritance Mapping with Association,但如果你需要Animal自己成为一个实体,比如创建选项列表。
在这种情况下,a 的鉴别器列Pet位于 的物种列中animal table。

所以课程会是这样的。
class Animal
{
$id;
$species;
}
/**
* @Table(name="animal")
* @InheritanceType("JOINED")
* @DiscriminatorColumn(name="species", type="string")
* @DiscriminatorMap({"dog" = "Dog", "cat" = "Cat"})
*/
abstract class Pet
{
$id
$species;
}
class Dog extends Pet { }
class Cat extends Pet { }
class Owner
{
/**
* @OneToMany(targetEntity="Pet")
*/
$pets
}
我看到了几个问题。
该
animal表没有外键owner。所以这个$pets协会是行不通的。Animal并且Pet或多或少是同一件事。如果有人更改了Animal这些更改中的某些内容,则不会反映在任何子Pet类中。
第一个问题的可能解决方案是有一个名为 的额外表pet,但关联仍然存在问题,因为鉴别器列仍在animal表中并且复制列pet会破坏规范化。
