1

类表继承用于扩展 Person,以允许添加 Employee 和 Dragon。

Person、Employee 和 Dragon 都可以拥有一个 Toys。

Person、Employee、Dragon 和 Toys 之间应该如何建立联系?

类表继承的优点似乎是可以在父实体(人)上设置关系,从而避免创建名为:PersonToy、EmployeeToy 和 DragonToy 的新实体。

如果可以编写代码以便在内部一切正常,那将是理想的$toy->setEmployee($employee)$toy->setDragon($dragon)我认为它必须这样做setPerson()

另一方面,是否可以调用 $toy->getDragon() 和 $toy->getEmployee() 并获得 Dragon/Employee 而不是 Person

我知道实体玩具只与人有关系,但人可以扩展,因此是龙或雇员。

如果可能的话,如何做到这一点?

/**
 * @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