gpt4 book ai didi

validation - Doctrine PHP 1.2 - 如何跳过空字段的唯一验证

转载 作者:行者123 更新时间:2023-12-04 06:06:30 26 4
gpt4 key购买 nike

我有一个具有独特字段的模型,如下所示。问题是该字段是可选的,当它为空时,我得到了学说的唯一错误消息。

我期望它只验证 'notnull' => true 字段的唯一性。

$this->hasColumn('filename', 'string', 40, array(
'type' => 'string',
'unique' => true,
'length' => '40',
));

先感谢您。

编辑:我禁用了验证,看起来该字段带有一个空字符串而不是空字符串:

SQLSTATE[23000]:违反完整性约束:1062 重复条目 '' 键 'filename'

所以现在的问题是:如何对空白值强制执行空值...

编辑 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com