情况:我有一个基于实体的表单。这个实体有两个属性 country 和 staticRank ,这两个属性的元组都应该是唯一的...... 但是 staticRank 可能不是必需的,因此,它可以为null。我尝试使用 UniqueEntity 注释解决该问题:
@UniqueEntity(fields={"country", "staticRank"})
这并不像预期的那样工作,因为如果 staticRank null ,根据我的定义它应该是一个有效的组合。但是,有几个元组使用相同的 country 和 null (对于 staticRank ),因此约束会指出违规。
实际问题:如果没有继承" UniqueEntityValidator"有没有办法实现此行为?
编辑:据我所知,约束的 ignoreNull - 属性只允许两个值为空(或者如果约束只设置为单个字段)
答案 0 :(得分:1)
通过将服务传递到我的Type(继承自" AbstractType")并添加约束选项来解决该问题:
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setRequired('myService');
$resolver->setDefaults([
// ...
'constraints' => [
new Callback([
'callback' => [$this, 'checkCountryRankUniqueness']
])
]
]);
}
在该约束方法中,我检查了 staticRank 是否为空。如果它不为null,它将遍历所有对象并检查该组合是否是唯一的。