1

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;        
}
4

0 に答える 0