在Model_Page类中,扩展Kohana ORM类,我有这个规则定义:
public function rules() {
return array(
'url' => array(
array('Model_Page::unique_url', array($this)),
),
);
}
为了简化这里,我将从此函数返回false,因此在我尝试保存/更新页面时它永远不会验证:
public static function unique_url($page) {
return false;
}
这可以正常工作,如果 url的值是 not NULL 或不是空字符串。
但是如果我已经有一个带有空url的页面,并且我尝试添加一个带有空url的新页面,那么即使强制返回false,也会忽略unique_url函数。
这可能是一个错误,但也许我错过了什么......?在Kohana文档中,对于唯一的示例,他们使用用户名作为示例,但用户名也有一个not_empty规则,这里不适用。
任何帮助/建议表示赞赏!
答案 0 :(得分:0)
我相信规则会在您设置值后应用,而不是在您保存时应用。
我遇到了类似的问题 - 如果我没有为该字段分配任何值,则过滤器无效。我写了自己的保存方法:
public function save(Validation $validation = NULL)
{
if (!$this->loaded())
{
$this->ordering = 0;
}
return parent::save($validation);
}
这样,总是会为新创建的对象分配排序,我的过滤器也可以工作。
这就是我建造另一个模型的方式。这是一个拥有独特公司名称的公司模型。该字段的规则定义如下:
'name' => array(
array('not_empty'),
array('max_length', array(':value', 255)),
array(array($this, 'unique_name'))
)
我有一个方法:
public function unique_name($value)
{
$exists = (bool) DB::select(array(DB::expr('COUNT(*)'), 'total_count'))
->from($this->_table_name)
->where('name', '=', $value)
->where($this->_primary_key, '!=', $this->pk())
->execute($this->_db)
->get('total_count');
return !$exists;
}
它基本上检查是否有任何其他公司与当前公司同名。也许这会让您了解解决方案可能出现的问题。