yii: how to make a unique rule for two attributes

yii, yii-validation, yii1.x

Solution

This can be done by Yii itself, you do not need an extension for it. However an extension can help cleaning up the `rules()` method as described here:

http://www.yiiframework.com/extension/unique-attributes-validator/

This is the code (copied from that site) which will work without using the extension:

public function rules() {
    return array(
        array('firstKey', 'unique', 'criteria'=>array(
            'condition'=>'`secondKey`=:secondKey',
            'params'=>array(
                ':secondKey'=>$this->secondKey
            )
        )),
    );
}

In case the value of `$this->secondKey` is not available inside `rules()`-method you can add the validator in CActiveRecords `beforeValidate()`-method like this:

public function beforeValidate()
{
    if (parent::beforeValidate()) {

        $validator = CValidator::createValidator('unique', $this, 'firstKey', array(
            'criteria' => array(
                'condition'=>'`secondKey`=:secondKey',
                'params'=>array(
                    ':secondKey'=>$this->secondKey
                )
            )
        ));
        $this->getValidatorList()->insertAt(0, $validator); 

        return true;
    }
    return false;
}

Problem

I have a table like this: (id, name, version, text). (name, version) is unique key, how can i make a rule to validate this.

Original source