Doctrine2 DiscriminatorMap可以是可选的/自动的,以适应子类+名称空间吗?

时间:2015-08-02 21:06:14

标签: entity-framework symfony doctrine-orm bundle discriminator

我有一个抽象实体模型类,其继承类型为“join”。

如果我想在另一个包中扩展该实体,我需要将“children类”添加到鉴别器映射中..但是如果它在另一个包中,那意味着我需要每次修改父包实体我想将该模型扩展到另一个包中,我认为这确实有点意义。

因此,如果我不想在每次使用新包中的新实体扩展它时都不需要修改抽象类鉴别器映射,是否可以说Doctrine或SF2 “discrimin”字段必须等于子实体类名+其命名空间,所以这样会更加动态所以我不必每次我想要编辑我的父包延伸

映射的超类不是一个好选择,因为我需要一对多的关系。

所以我的问题很清楚:如何避免手动设置“DiscriminatorMap”以便字段自动设置为子类名+命名空间? (discr =继承的类名+名称空间)

这是很酷的例子:

/**
* Operable
*
* @ORM\Table()
* @ORM\InheritanceType("JOINED")
* @ORM\DiscriminatorColumn(name="discr", type="string")
* @ORM\DiscriminatorMap(**AUTOMATIC**)
* @ORM\Entity(repositoryClass="FOO\PaymentBundle\Entity\OperableRepository")
* @ORM\HasLifecycleCallbacks
*/
abstract class Operable     {
    /* some good stuff */
}

非常感谢大家,祝你有个美好的一天!

1 个答案:

答案 0 :(得分:0)

在花时间仔细阅读文档之后,解决方案非常简单:

只需删除" @ORM \ DiscriminatorColumn"来自那里的注释!

  

鉴别器映射中的类的名称不需要   如果类包含在同一名称空间中,则完全限定   应用鉴别器映射的实体类。

     

如果未提供鉴别器映射,则生成映射   自动。自动生成的鉴别器映射   包含每个类的小写短名称作为键。

     

(来源:http://doctrine-orm.readthedocs.org/en/latest/reference/inheritance-mapping.html