2012-05-09 12 views
1

Doctrine2アプリケーションで私のクラスのコンストラクタを書いています.Fruits、Apple、Bananasとしましょう。Doctrine2:単一のテーブル継承で親クラスを抽象化する必要がありますか?

FruitsApplesBananasがフィールドtype上の単一テーブル継承を使用してFruitsから継承する親クラスです。

Doctrine2のドキュメントページには、単一のテーブル継承のための例があります。単一表継承の使用を常に区別している場合、識別子クラスのフィールドは常に設定する必要があるため、基本クラスFruitsは抽象クラスである必要がありますか?もしそうなら、この動作を防ぐためにFruitsのコンストラクタも保護する必要がありますか?

答えて

3

親クラス "Fruits"には再宣言が必要なメソッドがないため、明示的に抽象宣言する必要はないと思います。

また、「フルーツ」のインスタンスを永続化したい(ある種の果物については不明)ユースケースがあります。親を抽象としてマークすると、これを行うことができなくなります。

多分果物は悪い例です。しかし、彼らがドキュメントで持っているPersonの例が良いです。従業員は人定義を継承します。しかし私はまた、タイプの不明なPersonインスタンスを永続させたいかもしれません。したがって、@DiscriminatorMap内の "person" = "Person"。

http://docs.doctrine-project.org/projects/doctrine-orm/en/2.0.x/reference/inheritance-mapping.html#single-table-inheritance

+0

ありがとうございます!私は、ドキュメント内の親オブジェクトを区別する微妙なことを理解していないことに気付きました。私のアプリケーションでは、スーパークラスのタイプは欲しくないので、子供の一人にして欲しいので、おそらく大丈夫でしょうか? –

+0

親が個人的にインスタンス化されるべきではないと感じる場合、私はコンストラクタを非公開にします。しかし、そうです、あなたのエンティティをアプリケーションの要件に合わせてください、それが彼らのためにあります。また、discriminatorフィールドは、doctrineによって内部的に使用されます。これを設定/取得する必要はありません。 –

関連する問題