Yii: Уникальное трио (или проверка на уникальность сочетания трех значений полей)

Yii: Уникальное трио (или проверка на уникальность сочетания трех значений полей) Как проверять несколько полей на уникальность именно как группы, то есть одновременно все поля не должны повторяться вместе группой. Можно назвать это уникальной парой, уникальным трио, квартетом и т.д.

Валидатор unique может проверять уникальность одного значения, например name, но чтобы проверить уникальность сочетания пары значений или трёх значений, например name, email и discipline_id придётся создать дополнительный метод. Этот отдельный метод вызывается уже после инициализации полей, поэтому $this->name и $this->email нормально подставляют параметры. До этого, непосредственно в rules(), значения атрибутов пусты и проверку criteria там не осуществить. 

Делаем так.

Модель:

public function rules()
	{
		// NOTE: you should only define rules for those attributes that
		// will receive user inputs.
		return array(
			...
			array('discipline_id','uniqueNameAndEmailAndDiscipline',),
			...
		);
	}
	
	public function uniqueNameAndEmailAndDiscipline($attribute,$params=array())
{
    if(!$this->hasErrors())
    {
        $params['criteria']=array(
            'condition'=>'name=:name AND email=:email',
            'params'=>array(':name'=>$this->name, ':email'=>$this->email),
        );
        $validator=CValidator::createValidator('unique',$this,$attribute,$params);
        $validator->validate($this,array($attribute));
    }
} 



almix
Разработчик Loco, автор статей по веб-разработке на Yii, CodeIgniter, MODx и прочих инструментах. Создатель Team Sense.

Вы можете почитать все статьи от almix'а.



Другие статьи по этой теме:

Комментарии (0)     Подпишитесь на RSS комментариев к этой статье.