答案 0 :(得分:1)
As explained in doctrine documentation,您可以将表继承与带有单表继承的注释或带有类表继承的注释一起使用。
<?php
namespace MyProject\Model;
/**
* @Entity
* @InheritanceType("SINGLE_TABLE")
* @DiscriminatorColumn(name="discr", type="string")
* @DiscriminatorMap({"person" = "Person", "employee" = "Employee"})
*/
class Person
{
// ...
}
/**
* @Entity
*/
class Employee extends Person
{
// ...
}
<?php
namespace MyProject\Model;
/**
* @Entity
* @InheritanceType("JOINED")
* @DiscriminatorColumn(name="discr", type="string")
* @DiscriminatorMap({"person" = "Person", "employee" = "Employee"})
*/
class Person
{
// ...
}
/** @Entity */
class Employee extends Person
{
// ...
}
在第一种情况下,所有记录都将存储在同一个表中,并带有一个字段来区分它们的不同类型。
在第二种情况下,“父”表将包含类之间具有公共字段的所有记录,而根据类的其他字段将存储在扩展类的不同表中。
根据您的需要,由您决定使用哪一个 在第一种情况下,在扩展类中有很多属性会导致表中有很多空字段,而在第二种情况下,你必须合并两个表(“父”表和扩展表)获得记录的所有字段。
要将其与your linked Symfony1.4 documentation进行比较,单表继承等同于SF1.4的“列聚合表继承策略”,而类表继承相当于SF1.4的“具体表继承策略”。