我有一个具有独特字段的模型,如下所示。问题是该字段是可选的,当它为空时,我会收到学说的独特错误消息。
我期望它只是验证“notnull”=> true 字段的唯一性。
$this->hasColumn('filename', 'string', 40, array(
'type' => 'string',
'unique' => true,
'length' => '40',
));
提前谢谢您。
编辑:我禁用了验证,看起来该字段携带空白字符串而不是 null:
SQLSTATE[23000]:违反完整性约束:1062 键“文件名”的重复条目“”
所以现在的问题是:如何在空白值上强制执行 null 值...
编辑2:我这样做是为了解决问题。 =/
public function preValidate()
{
if(!$this->filename) {
$this->filename = null;
}
}
最佳答案
扩展表单并使用您自己的自定义方法覆盖帖子验证器可能是一个更好的主意:
您可以将其放入 FileForm(或任何您的表单名称)中:
$this->validatorSchema->setPostValidator(
new myValidatorDoctrineUniqueWithNull(array('model' => 'File', 'column' => array('filename')))
);
然后您将创建自己的验证器(如上面所定义),如下所示:
class myValidatorDoctrineUniqueWithNull extends sfValidatorDoctrineUnique
{
protected function doClean($values)
{
// if the user passes an empty value, assume it must be null in the database
// which is an allowed "non-unique" value.
$column = $this->getOption('column');
if (!$values[$column])
{
return $values;
}
return parent::doClean($values);
}
}
如果您构建了一个验证器,那么如果您再次遇到这种情况,它是可以重新使用的。
关于validation - Doctrine PHP 1.2 - 如何跳过空字段的唯一验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8294751/