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
正規化が失敗するため、関連付けにはまだ問題があります。