所以我正在努力将Symfony 3集成到遗留代码库中,而且大多数情况下一切都很好。不幸的是,我遇到了单表继承与一个时髦的鉴别器的问题。注意:我无法更改架构(至少很快就会这样),因为它与许多旧代码捆绑在一起。
我有经典人物 - >员工映射。有了这个我有2个表:
转换为3个实体
这似乎很简单,除了唯一可行的鉴别器是company_id,它是一个人的列,表示该人所属的公司。如果company_id = 1则是员工,否则只是一个普通人。
据我所知,我需要一张看起来像这样的地图:
/**
* @InheritanceType( "SINGLE_TABLE" )
* @DiscriminatorColumn( name = "company_id", type = "integer" )
* @ORM\DiscriminatorMap({
* 1 = "Employee",
* 2 = "Person",
* 3 = "Person",
* ...
* 5001 = "Person"
* })
*
* @ORM\Table(name="person")
* @ORM\Entity
*/
class Person
{}
这种映射方式无法维持。我环顾四周,但我没有找到一个很好的解决方案。现在我使用Mapped超类,然后将Person和Employee都指向person表,这是从代码的角度来看,但如果我运行schema验证它已经存在由于表名而导致的错误。这使得维护映射变得更加困难。
答案 0 :(得分:0)
老实说,我不确定这样的事情是否可行,因为生成的查询会有点疯狂(特别是如果你有很多记录)。
另一个想法是如何解决它,添加新列(不应该影响旧应用程序,因为它不会更改任何当前字段)将使用触发器填充并使用此作为鉴别器。如果不可能,请考虑使用新字段创建视图作为鉴别器。