【问题标题】:Symfony UniqueEntity vs UniqueConstraint vs unique=trueSymfony UniqueEntity vs UniqueConstraint vs unique=true
【发布时间】:2017-09-25 22:29:01
【问题描述】:
【问题讨论】:
标签:
symfony
doctrine-orm
doctrine
【解决方案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。