2017-09-25 17 views
2

@UniqueEntityバリデータと@UniqueConstraintテーブルアノテーションとunique=trueオプションの間で、@Columnアノテーションの概念の違いを説明できる人は誰ですか?Symfony UniqueEntity対ユニーク= true

私は@UniqueConstraintがデータベースレベルでUNIQUEインデックスを追加し、@UniqueEntityがORMレベルで有効であることを理解しています。だから私はどのようなオプションを使用するのか、あるいはそれらをすべて使用するのですか?

+1

https://stackoverflow.com/questions/33196548/doctrine-orm-level-difference- between-uniqueconstraint-and-columnunique-true – BentCoder

答えて

4

@UniqueConstraintおよびunique=trueは、Doctrineの一部であり、同様のことをします。

特定の列にunique=trueを設定すると、Doctrineはこの列の一意のキーをという物理的にデータベースに作成します。

@UniqueConstraintをデータベースの複数の列(複雑なユニークキー)に作成することができます。しかし、単一の列を渡すと、結果はそのフィールドにunique=trueを使用した場合とまったく同じになります。

@UniqueEntityはDoctrineの一部ではありませんが、はsymfonyフレームワークの一部です。上記のオプションは、適切なスキーマを生成するためにDoctrineで使用されていますが、フォームの送信時に通常はSymfonyフォームコンポーネントが使用するバリデータです。

最後の質問に答えるには、通常、@UniqueEntity@UniqueConstraintまたはunique=trueのいずれかを使用する必要があります。

1

documentationに述べたようにunique=trueは、1つの列に一意の制約のために使用される場合、@UniqueConstraint注釈が、複数の列に一意性制約を作成するために使用されます。

UniqueEntityValidatorが表示され、唯一のデータベース制約の目的は、重複したデータを保存しないようにすることです。

あなたの質問に対する答えは、このようなものです。データベース制約と@UniqueValidatorの両方を使用する必要があります。

関連する問題