Doctrine单表继承从Mapped Superclass

时间:2016-07-28 15:59:58

标签: symfony inheritance doctrine

我想要做的是从映射的超类扩展单个表继承类,但是当我尝试更新方案时,我会发现以下错误:

  

[学说\ DBAL \架构\ SchemaException]
  名为'uniq_efe84ad134ecb4e6'的索引已在表'article_article'上定义。

我的层次结构:

Content(mappedSuperClass)< - Article(SingleTableInheritance)< - MyArticle

类:

abstract class Content
{
    protected $id;

    public function getId()
    {
        return $this->id;
    }
}

class Article extends Content
{

}

class MyArticle extends Article
{

}

映射:

Content:
    type: mappedSuperclass
    id:
        id:
            type: integer
            id: true
            generator:
                strategy: AUTO


Article:
    type: entity
    table: article_article
    inheritanceType: SINGLE_TABLE
    discriminatorColumn:
        name: discr
        type: string
    discriminatorMap:
        article: Article
        my_article: MyArticle

MyArticle:
    type: entity

这里有什么问题?

1 个答案:

答案 0 :(得分:0)

错误在mappedSuperclass上。 Content类有一个 oneToOne 关系,这不在上面的例子中,因为我试图让它更抽象。

Content:
    # ...
    oneToOne:
        route:
            targetEntity: Route

似乎doctrine尝试再次为扩展类添加唯一键。我不知道这是对mappedSuperclass的限制还是只是一个bug,但我通过将oneToOne关系改为manyToOne 来解决它,因为它几乎相同,但是没有独特的约束。

Content:
    # ...
    manyToOne:
        route:
            targetEntity: Route