2017-03-29 86 views
1

情境:我有一个基于实体的表单。这个实体有两个属性国家staticRank和这两个两个属性的元组应该是唯一的...... 但是:staticRank可能是不需要的,原因在于,它可以为null。我尝试使用UniqueEntity注释解决这个问题:Symfony表单验证:UniqueEntity - 多个字段 - 包括一个可为空的字段

@UniqueEntity(fields={"country", "staticRank"}) 

这不是工作像预期的,因为如果staticRank应当按照我的定义的有效组合。然而,有几个元组给予相同的国家(对于staticRank),所以约束记录违反。

实际问题:有没有一种方法来实现这种行为而不继承“UniqueEntityValidator”?

编辑:据我所经历的,约束的ignoreNull - 属性将只允许两个值是零(或者如果约束仅设置为单场)

+0

国家和staticRank实体是多对多关系还是实体的字段? – Mawcel

+0

@Mawcel国家是一个ManyToOne,staticRank只是一个领域(都在同一个实体中使用) – thellmei

+0

http://stackoverflow.com/questions/25810738/unique-values-for-two-columns-in-doctrine – Mawcel

回答

1

解决了问题通过传递服务为我喜欢的类型(从“AbstractType”继承),并增加了约束选项:

public function configureOptions(OptionsResolver $resolver) 
{ 
    $resolver->setRequired('myService'); 
    $resolver->setDefaults([ 
     // ... 
     'constraints' => [ 
      new Callback([ 
       'callback' => [$this, 'checkCountryRankUniqueness'] 
      ]) 
     ] 
    ]); 
} 

在这种约束的方法,我查了staticRank是否为空。如果它不为空,它将迭代所有对象并检查组合是否唯一。