Symfony UniqueEntity vs UniqueConstraint vs unique = true

时间:2017-09-25 22:29:01

标签: symfony doctrine-orm doctrine

任何人都可以解释@UniqueEntity验证器,@UniqueConstraint表格注释和@Column注释的unique=true选项之间的概念差异。

我理解@UniqueConstraint在数据库级别添加UNIQUE索引,在{ORM级别} @UniqueEntity验证。那么我应该使用什么选项,还是使用所有选项?

2 个答案:

答案 0 :(得分:15)

@UniqueConstraintunique=true 是Doctrine 的一部分并执行类似的操作。

当您在特定列上设置unique=true时,Doctrine会在此列物理数据库中创建唯一键。

@UniqueConstraint可用于在多个列(复杂唯一键)上创建数据库中的唯一键 。但是如果你传递一个列,那么结果将与在该字段上使用unique=true完全相同。

另一方面,

@UniqueEntity不是Doctrine的一部分,但它是Symfony框架的一部分。虽然Doctrine使用上述选项来生成正确的模式,但这个选项只是Symfony Form Component在提交表单时通常使用的验证器。

所以回答你的最后一个问题 - 是的,你通常应该使用@UniqueEntity@UniqueConstraintunique=true中的一个。

答案 1 :(得分:2)

正如documentation中所述,当@UniqueConstraint用于一列上的唯一约束时,unique=true注释用于在多列上创建唯一约束。

UniqueEntityValidator存在以显示友好错误消息,唯一数据库约束的目的是确保您不存储重复数据。

所以问题的答案是这样的 - 你应该使用数据库约束和@UniqueValidator