Doctrine orm 条令单表继承自定义鉴别器映射

Doctrine orm 条令单表继承自定义鉴别器映射,doctrine-orm,Doctrine Orm,是否可以创建一个实体,该实体使用两列作为鉴别器列 存在一个包含3列的表: id(主键) 主_类型(varchar 5) 子类型(int 4) 我已设置了主\u类型的继承: /** * @ORM\Entity * @ORM\Table(name="article") * @ORM\InheritanceType("SINGLE_TABLE") * @ORM\DiscriminatorColumn(name="main_type", type="string") * @ORM\Disc

是否可以创建一个实体,该实体使用两列作为
鉴别器列

存在一个包含3列的表:

  • id(主键)
  • 主_类型(varchar 5)
  • 子类型(int 4)
我已设置了主\u类型的继承:

/**
 * @ORM\Entity
 * @ORM\Table(name="article")
 * @ORM\InheritanceType("SINGLE_TABLE")
 * @ORM\DiscriminatorColumn(name="main_type", type="string")
 * @ORM\DiscriminatorMap({
 *  "news" = "News", 
 *  "blog" = "Blog", 
 *  "event" = "AbstractEvent", 
 * })  
 */
 abstract class AbstractArtcile 
到目前为止,这是可行的,但是事件可以有许多子类型。在事件中,需要以下内容:

 * @ORM\DiscriminatorColumn(name="sub_type", type="string")
 * @ORM\DiscriminatorMap({
 *  1 = "Event\Sport", 
 *  2 = "Event\Night", 
 *  3 = "Event\Epic", 
 * })  
 abstract class AbstractEvent
但是,这不起作用,因为它也不知道在AbstractEvent上运行鉴别器映射

我知道映射必须设置在最顶层,这就是为什么上面的方法不起作用

必须在作为映射实体层次结构一部分的最顶层类上指定@InheritanceType和@DiscriminatorColumn。

可以使用自定义鉴别器吗?如果是,怎么做

或者,更好的解决方案是创建一个新列,将main_类型和sub_类型中的值组合起来,并将其用于地图,即news-0、blog-0、event-1、event-2、event-3


表结构来自旧系统,无法修改,但可以添加其他列。

不确定它是否有助于进一步解决问题。但是,您是否尝试过为您的
抽象事件
使用。如果您只需要
事件
,使用类别的特征,您可能能够解决这个问题。事件可能包含各种类型的事件(运动/夜间/史诗/任何类型)。不确定它是否有助于进一步解决您的问题。但是,您是否尝试过为您的
抽象事件
使用。如果您只需要
事件
,使用类别的特征,您可能能够解决这个问题。活动可以举办各种类型的活动(运动/夜间/史诗/任何类型)。