Symfony UniqueEntity vs UniqueConstraint vs unique=true
Posted
技术标签:
【中文标题】Symfony UniqueEntity vs UniqueConstraint vs unique=true【英文标题】: 【发布时间】:2017-09-25 22:29:01 【问题描述】:谁能解释@UniqueEntity
验证器、@UniqueConstraint
表注释和@Column
注释的unique=true
选项之间的概念区别。
我了解@UniqueConstraint
在数据库级别添加UNIQUE
索引,@UniqueEntity
在 ORM 级别验证。那么我应该使用哪个选项,或者我应该使用所有选项?
【问题讨论】:
***.com/questions/33196548/… 【参考方案1】:@UniqueConstraint
和 unique=true
是 Doctrine 的一部分并且做类似的事情。
当您在特定列上设置unique=true
时,Doctrine 将在该列上创建一个唯一键在数据库中物理。
@UniqueConstraint
可用于在多个列上创建唯一键在数据库中(复杂唯一键)。但是,如果您传递单个列,则结果将与在该字段上使用 unique=true
完全相同。
另一方面,@UniqueEntity
不是 Doctrine 的一部分,但 它是 Symfony 框架的一部分。虽然 Doctrine 使用上面的选项来生成正确的模式,但这只是 Symfony 表单组件在提交表单时通常使用的验证器。
所以要回答您的最后一个问题 - 是的,您通常应该同时使用 @UniqueEntity
和 @UniqueConstraint
或 unique=true
之一。
【讨论】:
【参考方案2】:如documentation 中所述,@UniqueConstraint
注释用于在多个列上创建唯一约束,而unique=true
用于对一列进行唯一约束。
UniqueEntityValidator
的存在是为了显示友好的错误消息,唯一的数据库约束的目的是确保您不存储重复数据。
所以你的问题的答案是这样的——你应该同时使用数据库约束和@UniqueValidator
。
【讨论】:
以上是关于Symfony UniqueEntity vs UniqueConstraint vs unique=true的主要内容,如果未能解决你的问题,请参考以下文章
FOSUserBundle:UniqueEntity 注释抛出:字段“用户”没有被 Doctrine 映射,因此无法验证其唯一性