只有一张表的教义继承可能?



在我的学说模型中,我希望有一个具有所有数据库持久化字段的BasePerson类。

* @ORMEntity()
class BasePerson 
{
$street;
$number;
...
}

我还想有一个从基人类扩展而来的Person类,该类还附加了一个实体侦听器。侦听器触发 API 调用,并用位置数据填充我的"人员"实体。

* @ORMEntity()
* @ORMEntityListeners({"..."})
class Person extends BasePerson 
{
$location;
}

对于所有不需要 API 调用的基本操作,我想使用BasePerson类,对于所有与 API 相关的操作,我将使用Person类;但在每种情况下,我至少都有来自数据库的信息。

现在的问题是,每当我向两个实体添加@ORMEntity()注释时,Doctrine认为这应该是两个表。我不想要两张桌子。如果我将实体注释留在两个实体之一上,学说会给我一个错误,即这个实体是不受管理的......

如何将所有内容放在一个表中?我读过关于单表继承的信息,但为此,学说将使用鉴别器列来管理它......但这不是我打算的用例...

要获得干净的体系结构,应使用相同的实体和两个 DTO。一个用于 API 并添加属性"位置",另一个用于项目的其他视图。

原则(版本>= 2.4)可以使用"NEW"运算符直接从查询返回 DTO,例如:

<?php
$this
->get('doctrine.orm.entity_manager')
->createQueryBuilder()
->select('NEW AcmeDTOCategoryListView(category.id, category.title)')
->from('AcmeDemoBundle:Category', 'category');

您可以在 Person 类中拥有一些与 API 相关的方法,并仅在需要时使用它们。我不明白为什么这会是一个问题。

我认为你不应该直接使用BasePerson类。 我认为教义不会允许你试图拥有的行为。

相关内容

  • 没有找到相关文章