这应该可以正常工作。我没有添加像“@ORM\Entity”(http://docs.doctrine-project.org/en/latest/reference/annotations-reference.html)这样的默认注释。我希望这是您正在寻找的,否则请告诉我。
/**
* @ORM\InheritanceType("SINGLE_TABLE")
*/
class Entity {
protected $id;
}
class User extends Entity {
/**
* @ORM\ManyToOne(targetEntity="Entity")
* @var Entity
*/
protected $target;
}
看看:http :
//docs.doctrine-project.org/en/2.0.x/reference/inheritance-mapping.html 由于性能问题,您应该使用单继承而不是类表继承。
否则,Doctrine 将对实体表的子表进行连接,因为 Doctrine 不知道“实体”具有哪种类型。就像是:
SELECT t1.id, t2.title, t3.level FROM entity t1 LEFT JOIN document t2 ON t2.id = t1.id LEFT JOIN report t3 ON t3.id = t1.id
更多的子表将导致更多的连接 -> 慢。
这是您检查目标是文档还是报告并确定您必须访问哪个字段的方式。
// loads all users
$users = $this->em->getRepository('User')->findAll();
foreach($users as $user){
$target = $user->getTarget()
if($target instanceof Document){
echo $target->getTitle();
}
else if($target instanceof Report){
echo $target->getLevel()
}
}