类表继承用于扩展Person,以允许添加Employee和Dragon。
一个人,员工和龙都可以拥有玩具。
如何建立Person,Employee,Dragon和Toys之间的联系?
类表继承的优点似乎是可以在父实体(Person)上设置关系,避免创建名为PersonToy,EmployeeToy和DragonToy的新实体。
如果可以编写代码以使$toy->setEmployee($employee)
,$toy->setDragon($dragon)
全部起作用,内部我认为必须执行setPerson()
,这将是理想的。
在另一侧可以调用$ toy-> getDragon()和$ toy-> getEmployee()并获取Dragon / Employee而不是Person
我知道实体玩具只与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;
}