Symfony 2 + Doctrine 2 に基づく私のプロジェクトでは、次のアプローチでモデルを実装します (FOSUserBundle ソースコードに基づく):
- モデルに属するすべてのクラスは、バンドルの「モデル」フォルダーにあります
- 「エンティティ」フォルダーには、モデルからクラスを拡張するクラスがあります
- 「Resources/config/doctrine/」には、YAML 形式のマッピングを含むファイルがあります
重要: STI が必要な永続化 (エンティティ) のクラスは、エンティティからではなく、モデルからそれぞれのクラスを拡張します。
問題:
#Resources/config/doctrine/ContentElement.orm.yml
My\CoreBundle\Entity\ContentElement:
type: entity
table: content_element
inheritanceType: SINGLE_TABLE
discriminatorColumn:
name: discr
type: string
length: 255
discriminatorMap:
contentElement: ContentElementList
htmlContentElement: HtmlContentElement
id:
id:
type: integer
generator: { strategy: AUTO }
fields:
anchor_id:
type: string
anchor_text:
type: string
#Resources/config/doctrine/HtmlContentElement.orm.yml
My\CoreBundle\Entity\HtmlContentElement:
type: entity
fields:
html:
type: text
データベースを更新しようとすると、さらに「id」を指定するまで、YAML ドライバーからエラーが発生します (これは、思ったように継承する必要があります)。
id のマッピングを追加した後、エンティティごとに 2 つの個別のテーブルが表示される SQL クエリがあります。
これは、HtmlContentElement が Model\HtmlContentElement を拡張しているが、Entity\ContentElement を拡張していないために発生すると思われます。
私は正しいですか、私の問題に対する既知の解決策はありますか?