2017-09-25 56 views
2

任何人都可以解釋@UniqueEntity驗證器,@UniqueConstraint表註釋和unique=true選項@Column註釋之間的概念區別是什麼。Symfony UniqueEntity vs UniqueConstraint vs unique = true

據我所知,@UniqueConstraint在數據庫級別添加了UNIQUE索引,@UniqueEntity在ORM級別上進行了驗證。那麼我應該使用什麼選項,還是我全部使用它們?

+1

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

回答

4

@UniqueConstraintunique=true是Doctrine的一部分,並做類似的事情。

當你在一個特定的列設置unique=true,然後將學說物理數據庫創建此列一個獨特的密鑰。

@UniqueConstraint可用於創建在多個列上數據庫一個唯一的密鑰(複雜唯一密鑰)。但是,如果您傳遞一個列,則結果將與在該字段上使用unique=true完全相同。

@UniqueEntity另一方面不屬於Doctrine的一部分,但是它是Symfony框架的一部分。雖然上述選項被Doctrine用於生成正確的模式,但這只是在提交表單時通常由Symfony表單組件使用的驗證器。

因此,要回答你的最後一個問題 - 是的,你平時應同時使用@UniqueEntity@UniqueConstraintunique=true之一。

1

documentation,@UniqueConstraint中所述,當對一列使用unique=true作爲唯一約束時,註釋用於在多個列上創建唯一約束。

UniqueEntityValidator存在以顯示友好的錯誤消息和唯一的數據庫約束的目的是確保您不會存儲重複的數據。

所以你的問題的答案是這樣的 - 你應該使用數據庫約束和@UniqueValidator

相關問題