Doctrine 2 Inheritance Mapping with Associationを読みAnimalましたが、それ自体がエンティティである必要がある場合は、オプションリストを作成する場合などです。
この場合、aのDiscriminator列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正規化が失敗するため、関連付けにはまだ問題があります。
