2

我有一个具有“已加入”继承类型的抽象实体模型类。

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

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

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

所以我的问题很清楚:如何避免手动设置“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 */
}

非常感谢你们所有人,祝你们有美好的一天!

4

1 回答 1

0

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

只需从那里删除“@ORM\DiscriminatorColumn”注释!

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

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

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

于 2015-08-02T21:16:14.050 回答