自定义判别器映射

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (31)

因此,我正致力于将Symfony 3集成到遗留代码库中,而且在大多数情况下,一切都很好。不幸的是,我遇到了一些问题,单表继承与时髦的鉴别器。注意:我无法更改模式(至少在短期内如此),因为它与许多旧代码绑定在一起。

我有经典的人物->雇员地图.我有两张桌子:

  • 公司

转换为3个实体

  • 公司
    • 雇员

这看起来很直截了当,除了唯一可行的鉴别者是公司。_ID是Person的列,表示该人属于哪个公司。如果公司_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
{}

这种映射方式是无法维持的。我四处看看,但没有找到一个很好的解决办法。目前,我正在使用一个映射的超类,然后将Person和Employee指向Person表,该表从代码的角度工作,但是如果我运行模式,请验证由于表名而导致的错误。这使得维护映射变得更加困难。

提问于
用户回答回答于

老实说,我不确定这样的事情是否可能发生,因为对于生成的查询(特别是如果有大量的记录),会有点疯狂。

另一个解决方法是添加新列(不应影响旧应用程序,因为它不会更改任何当前字段),该列将使用触发器进行填充,并使用此列作为鉴别器。如果这是不可能的,请考虑创建带有新字段的视图作为判别器。

扫码关注云+社区

领取腾讯云代金券