Class Table Inheritance を使用して Person を拡張し、Employee と Dragon を追加できるようにします。
人、従業員、ドラゴンはすべておもちゃを持つことができます。
Person、Employee、Dragon、Toys をどのように関連付けるべきか?
クラス テーブル継承の利点は、PersonToy、EmployeeToy、DragonToy と呼ばれる新しいエンティティの作成を回避して、親エンティティ (Person) に関係を設定できることです。
すべてが機能するよう$toy->setEmployee($employee)
にコードを記述できれば理想的です。 $toy->setDragon($dragon)
setPerson()
反対側では、$toy->getDragon() と $toy->getEmployee() を呼び出して、Person ではなく Dragon/Employee を取得できます。
Entity Toy は Person とのみ関係があることを理解していますが、Person は拡張され、Dragon または Employee になる可能性があります。
可能であれば、これをどのように達成できますか?
/**
* @Entity
* @ORM\Table(name="perosn")
* @InheritanceType("JOINED")
* @DiscriminatorColumn(name="discr", type="string")
* @DiscriminatorMap({"person" = "Person", "employee" = "Employee", "dragon" = "Dragon"})
*/
class Person
{
/**
* @ORM\OneToMany(targetEntity="Toy", mappedBy="person")
*/
protected $toys;
}
/**
* @Entity
* @ORM\Table(name="employee")
*/
class Employee extends Person
{
// ...
}
/**
* @Entity
* @ORM\Table(name="dragon")
*/
class Dragon extends Person
{
// ...
}
/**
* @Entity
* @ORM\Table(name="toy")
*/
class Toy {
/**
* @ORM\ManyToOne(targetEntity="Person", inversedBy="toys", cascade={"persist"})
*/
protected $person;
}