如何使用YAML格式的Doctrine为三个类配置单表继承?

时间:2018-04-23 15:58:49

标签: php symfony inheritance orm

在Symfony3项目中,我已经使用了" single_table"继承性:

ADS\CoreBundle\Entity\CustomPage:
type: entity
table: custom_page
inheritanceType: SINGLE_TABLE
discriminatorColumn:
    name: type
    type: string
id:
    id:
        type: bigint
        nullable: false
        options:
            unsigned: false
        id: true
        generator:
            strategy: IDENTITY
fields:
    content:
        type: json_array
        nullable: true
        length: null
        options:
            fixed: false
    creationdate:
        type: datetime
        nullable: true
        column: creationDate

第二个实体

ADS\CoreBundle\Entity\ProductRangePublication:
type: entity
table: custom_page
manyToOne:
    productRange2:
        targetEntity: ProductRange
        cascade: {  }
        fetch: LAZY
        mappedBy: null
        inversedBy: null
        joinColumns:
            productrange_id:
                referencedColumnName: id
        orphanRemoval: false

我想再次使用它,但是有两个类继承父类。 父母将是班级" Etfresearch"和孩子们的课程"文件"和"页面。" 我怎么能这样做?如何在同一个Doctrine配置文件中为两个不同的类放置两个鉴别器?

1 个答案:

答案 0 :(得分:0)

discriminatorMap选项添加到父类定义:

App\Entity\Etfresearch:
  type: entity
  inheritanceType: SINGLE_TABLE
  discriminatorColumn:
    name: discr
    type: string
  discriminatorMap:
    etfresearch: Etfresearch
    document: Document
    page: Page

App\Entity\Document:
  type: entity
  #[...]

App\Entity\Page:
  type: entity
  #[...]

例如,这会将“文档”映射到Document类,因此数据库中将其作为“discrimin”列的值的行将被标识为Document,并在您调用
时{ {1}}

请注意,当“文档”和“页面”扩展“Etfresearch”时,当您致电$this->getDoctrine()->getRepository(Document::class)->findAll();

时,将返回此表的所有