任何人都可以解释@UniqueEntity
验证器,@UniqueConstraint
表格注释和@Column
注释的unique=true
选项之间的概念差异。
我理解@UniqueConstraint
在数据库级别添加UNIQUE
索引,在{ORM级别} @UniqueEntity
验证。那么我应该使用什么选项,还是使用所有选项?
答案 0 :(得分:15)
@UniqueConstraint
和unique=true
是Doctrine 的一部分并执行类似的操作。
当您在特定列上设置unique=true
时,Doctrine会在此列物理数据库中创建唯一键。
@UniqueConstraint
可用于在多个列(复杂唯一键)上创建数据库中的唯一键 。但是如果你传递一个列,那么结果将与在该字段上使用unique=true
完全相同。
@UniqueEntity
不是Doctrine的一部分,但它是Symfony框架的一部分。虽然Doctrine使用上述选项来生成正确的模式,但这个选项只是Symfony Form Component在提交表单时通常使用的验证器。
所以回答你的最后一个问题 - 是的,你通常应该使用@UniqueEntity
和@UniqueConstraint
或unique=true
中的一个。
答案 1 :(得分:2)
正如documentation中所述,当@UniqueConstraint
用于一列上的唯一约束时,unique=true
注释用于在多列上创建唯一约束。
UniqueEntityValidator
存在以显示友好错误消息,唯一数据库约束的目的是确保您不存储重复数据。
所以问题的答案是这样的 - 你应该使用数据库约束和@UniqueValidator
。