我为ProductType, ProductTypeAttributes
(OneToMany)定义了以下验证:
Bike\ProductBundle\Entity\ProductType:
properties:
name:
- NotBlank: ~
productTypeAttributes:
- Valid: ~
Bike\ProductBundle\Entity\ProductTypeAttribute:
constraints:
- Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity:
fields: [attribute, productType]
errorPath: attribute
message: 'Attributes must be different for the same product type.'
ProductTypeAttributes
有一个唯一的密钥:attribute,productType
。
我正在使用ProductTypeAttributes
的嵌入表单(集合类型),可以添加/删除项目。验证似乎仅适用于数据库中已存在的记录,只有在我添加一个新的相关实体时才会发生,这将触发记录的唯一密钥违规。
问题是当添加两个具有相同属性/ productType的全新相关实体时,验证不起作用。在这种情况下,我得到了#34;重复的条目"异常。
因此,验证仅使用默认的findBy
方法检查db记录,但不会针对重复项对新添加的记录进行检查。
有什么办法可以克服这个问题?
答案 0 :(得分:0)
是,但不是通过默认的UniqueEntity验证器。您必须手动创建第二个验证器,该验证器适用于整个ProductType实体,并验证所有新(未保存)属性都不相同。
查看Symfony的烹饪手册,了解如何制作自己的验证器: http://symfony.com/doc/current/cookbook/validation/custom_constraint.html