Doctrine单表继承自定义判别映射

时间:2016-05-19 14:33:30

标签: doctrine-orm

是否可以创建一个使用两列DiscriminatorColumn

的实体

存在3列的表格:

  • id(主键)
  • main_type(varchar 5)
  • sub_type(int 4)

我已为main_type设置了继承:

/**
 * @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

然而这不起作用,因为它也不知道在AbsractEvent上运行鉴别器映射。

我知道映射必须设置在最高级别,这就是为什么以上不起作用。

  

必须在作为映射实体层次结构一部分的最顶层类上指定@InheritanceType和@DiscriminatorColumn。   http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/inheritance-mapping.html#single-table-inheritance

可以使用自定义鉴别器吗?如果是这样的话?

或者是创建一个新列的更好的解决方案,该列组合了main_type和sub_type中的值并将这些值用于地图,即news-0,blog-0,event-1,event-2,event-3?

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

0 个答案:

没有答案