в структуре Yii, могу ли я использовать уникальное правило проверки для проверки уникальности поля в каком-то определенном состоянии (я знаю, что есть критерии, но это условие немного сложно)? Т.е., я хочу проверить уникальность num_days по свойству property_id.
Таблица:
NUM PROP_ID 3 4 3 5
проверка должна проходить в случае, если я попробую вставить 3, 6, но не сработает в случае 3, 4
Проверьте UniqueAttributesValidator , а также этот ответ . В ссылках вы увидите, что они использовали $this->attributename
для массива params
для params
criteria
CUniqueValidator, но почему-то $this->attributename
было для меня null
. Я считаю, что это потому, что $this
не передается правильно валидатору, так что в любом случае было бы лучше использовать класс UniqueAttributesValidator, потому что он был создан только для таких ситуаций.
В результате sql будет иметь предложение WHERE
, подобное этому:
SELECT ... WHERE (`num`=:value) AND (`prop_id`=:prop_id) ...
который легко провалится на 3, 4 и пройдет 3, 6. Таким образом, он должен работать для вашей ситуации.
Сначала создайте уникальное поле в таблице
и в модели добавьте это в свои правила ()
array('field_name', 'unique'),
Для комбинации двух полей используйте этот код
public function rules() { return array( array('firstKey', 'unique', 'criteria'=>array( 'condition'=>'`secondKey`=:secondKey', 'params'=>array( ':secondKey'=>$this->secondKey ) )), ); }
Создайте свою пользовательскую функцию Validator или validation, это просто.