10

私のDB構造は次のとおりです。

仕事:

  • CTIテーブルワーク
  • Workを拡張するMappedSuperclassテーブルAbstractImageWork
  • AbstractImageWorkを拡張した最終テーブルPhotoWork

コメント:

  • MappedSuperclassテーブルコメント
  • Commentを拡張する最終テーブルWorkComment

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

これは、 MappedSuperclass AbstractImageWorkがWorkPhotoWorkの中間にあることに関係していると思いますが、実際にはこの関係を MappedSuperclass ではなく CTI テーブルに置きました..では、Doctrine はなぜこのように動作するのでしょうか?

何か案は?

4

3 に答える 3

1

マップされたスーパークラスはエンティティにすることはできず、クエリ可能ではなく、マップされたスーパークラスによって定義される永続的な関係は一方向でなければなりません (所有側のみ)。これは、マップされたスーパークラスでは一対多の関連付けがまったくできないことを意味します。さらに、多対多の関連付けは、マップされたスーパークラスが現在 1 つのエンティティでのみ使用されている場合にのみ可能です。継承をさらにサポートするには、単一または結合テーブルの継承機能を使用する必要があります。

ここで確認してください: https://www.doctrine-project.org/projects/doctrine-orm/en/2.7/reference/inheritance-mapping.html

于 2020-12-18T10:04:27.203 に答える