2017-09-25 57 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

相关问题