10

我的数据库结构如下:

工作:

  • CTI工作
  • MappedSuperclassAbstractImageWork扩展Work
  • 扩展AbstractImageWork的决赛桌PhotoWork

评论:

WorkComment与Work具有 ManyToOne 关系:

@ManyToOne(targetEntity="Work", inversedBy="comments")

Work与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'.

我想这与夹在WorkPhotoWork中间的 MappedSuperclass AbstractImageWork有关,但我实际上并没有将这种关系放在 MappedSuperclass 上,而是放在 CTI 表上.. 那么为什么 Doctrine 会这样呢?

有任何想法吗?

4

3 回答 3

22

在某些情况下,当您从标记为的类继承时遇到此类错误时@ORM\MappedSuperclass,请尝试将您的属性访问级别从私有更改为受保护

于 2013-11-15T11:30:12.130 回答
1

在其他情况下,当您@ORM\Entity在抽象上级类中声明而不是@ORM\MappedSuperclass

于 2020-02-11T13:33:50.227 回答
1

映射的超类不能是实体,它不是可查询的,并且由映射的超类定义的持久关系必须是单向的(仅具有拥有方)。这意味着在映射的超类上根本不可能进行一对多关联。此外,只有当映射的超类目前仅在一个实体中使用时,多对多关联才是可能的。为了进一步支持继承,必须使用单表或联表继承特性。

在这里查看:https ://www.doctrine-project.org/projects/doctrine-orm/en/2.7/reference/inheritance-mapping.html

于 2020-12-18T10:04:27.203 回答