Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

yii: how to make a unique rule for two attributes

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

like image 697
li meirong Avatar asked Mar 12 '12 16:03

li meirong


1 Answers

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; } 
like image 53
cebe Avatar answered Sep 18 '22 21:09

cebe