类表继承用于扩展 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;
}