我已经阅读了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
会破坏规范化。