如何在Yii CActiveRecord中添加属性验证之间的依赖关系?

时间:2013-08-23 10:28:18

标签: validation activerecord yii attributes

我有一个使用CActiveRecord表示键值设置的模型。

数据库表具有以下结构:

| Field       | Type         |
| key         | varchar(255) |
| category    | varchar(255) |
| default     | varchar(255) |
| is_editable | tinyint(1)   |
| is_required | tinyint(1)   |
| name        | varchar(255) |
| description | text         |
| value       | varchar(255) |
| create_at   | datetime     |
| update_at   | datetime     |

需要做的是仅在value属性为is_required时才需要true参数。

当方案为is_required时,首次添加create属性。

我猜这个过程应该继续使用自定义验证方法。

1 个答案:

答案 0 :(得分:0)

以下是问题的解决方案:

rules()方法应该类似于:

public function rules()
{
    return array(
        array('key', 'required'),
        array('name, is_required, default', 'required', 'on'=>'create'),
        array('key, category, default, type, name, value', 'length', 'max'=>255),
        array('category, value, name, is_required', 'safe'),
    );
}

我们可以覆盖isAttributeRequired函数,因此需要额外检查。

public function isAttributeRequired($attribute)
{
    if($attribute == 'value' && $this->is_required)
        return true;

    return parent::isAttributeRequired($attribute);
}