我的数据库结构如下:
工作:
注释:
WorkComment 与工作有一个ManyToOne关系:
@ManyToOne(targetEntity="Work", inversedBy="comments")
工作与 WorkComment 有一个OneToMany关系:
@OneToMany(targetEntity="WorkComment", mappedBy="work")
问题是Doctrine在更新架构时给了我这个错误:
[Doctrine\ORM\Mapping\MappingException]
It is illegal to put an inverse side one-to-many or many-to-many association on
mapped superclass 'Acme\...\AbstractImageWork#comments'.
我想这与MappedSuperclass AbstractImageWork 在工作和 PhotoWork 之间的中间有关,但我实际上并没有把这个关系放在MappedSuperclass上,但是放在CTI表上..那么为什么Doctrine的行为会像这样呢?
有什么想法吗?
答案 0 :(得分:15)
在某些情况下,如果从标记为@ORM\MappedSuperclass
的类继承时出现此类错误,请尝试将属性访问级别从私有更改为受保护强>
答案 1 :(得分:1)
在其他情况下,发生在抽象高级类中声明@ORM\Entity
而不是@ORM\MappedSuperclass
答案 2 :(得分:0)
映射的超类不能是实体,它不能查询,并且映射的超类定义的持久性关系必须是单向的(仅具有拥有方)。 这意味着在映射的超类上根本不可能存在一对多关联。此外,仅当映射的超类目前仅在一个实体中使用时,才可能进行多对多关联。为了进一步支持继承,必须使用单个或联合表继承功能。
在此处查看:https://www.doctrine-project.org/projects/doctrine-orm/en/2.7/reference/inheritance-mapping.html