2012-01-23 9 views
4

いくつかの実装で抽象スーパークラスを定義する場合、UniqueEntityチェックを機能させることができません。スーパークラスでUniqueEntity検証を適用する方法

たとえば、電子メールフィールドとFacebookUser/TwitterUserを持つAbstractUserを作成する場合、UniqueEntityチェックはサブクラスのみです。親のものではありません。

トップレベルでユニークチェックを適用する方法に関するアイデアはありますか?

EDIT:ディスクリミネータ列でjoinedテーブルの継承を使用しています。 doctrine documentation.

+0

は[MappedSuperclass](http://www.doctrine-project.org/docsで注釈を付け、あなたの抽象スーパークラスであります/orm/2.0/ja/reference/inheritance-mapping.html#mapped-superclasses)注釈? – jere

+0

いいえ、結合されたテーブル戦略を使用すると、SuperClassアノテーションがないことを意味します。 –

+1

FOSUserBundleはxmlを使用していると思います。そのようなことは注釈では不可能です。 – solarc

答えて

1

この場合、一意性をチェックするために独自の検証制約を作成する必要があります。

この場合、UniqueEntity制約がどのように適用されるかは論理的には不明です。 すべての拡張クラスをプロパティの一意性または現在使用されているクラスのみについてチェックしますか?

UniqueEntity制約は、テーブル内のプロパティの一意性を検索するため、2番目のバリアントは既定の動作ではカバーされません。 したがって、現在単一のテーブル継承で拡張されているクラスに対して制約を使用することはできません。質問のコメントに関しては


FOSUserBundleがconfig/validaton.xmlにUniqueEntity制約が含まれていません。

... orm、mongodb、couchdb、propelの場合はconfig/orm/orm.xmlです。

FOSUserBundleは、結合テーブルの継承の代わりに@MappedSuperClassを使用します。

0

あなたはこのようなスーパークラスと制約の設定にentityClassパラメータを定義することができます

/** 
* @UniqueEntity(fields={"email"}, entityClass=User::class) 
*/ 
関連する問題