Yii: ошибка при попытке использовать правило uniqe с условием - PullRequest
0 голосов
/ 04 мая 2018

Я имею дело с сайтом Yii 1.1x.

У меня есть модель с названием и идентификатором категории.

Я пытаюсь запретить пользователю вводить один и тот же заголовок в той же категории. (тот же заголовок в другой категории в порядке).

Я попытался использовать следующее правило, но при тестировании получаю сообщение об ошибке (при вводе дубликата заголовка в той же категории)

public function rules()
{
    // NOTE: you should only define rules for those attributes that
    // will receive user inputs.
    return array(
        array('str_title, id_category', 'required'),
        array('str_title', 'unique', 'criteria'=>array(
            'condition'=>'`id_category`=:idcategory',
            'params'=>array(
                ':idcategory'=>$this->id_category
            )
        )),

    );
}

Как уже упоминалось, когда я пытаюсь ввести дубликат заголовка в той же категории, я получаю это сообщение об ошибке:

CDbCommand failed to execute the SQL statement: SQLSTATE[HY093]: Invalid parameter number: parameter was not defined. The SQL statement executed was: SELECT 1 FROM `posts` `t` WHERE (`id_category`=:idcategory) AND (`t`.`str_title`=:ycp0) LIMIT 1

Кто-нибудь знает в чем проблема?

1 Ответ

0 голосов
/ 05 мая 2018

Вы не должны использовать значения атрибутов в методе rules(), так как он вызывается до того, как атрибуты установлены:

  1. Позвоните rules(), чтобы получить конфигурацию валидаторов.
  2. Установить атрибуты.
  3. Выполнить проверку.

Вы должны использовать существующее расширение ( пример ) для проверки составных ключей или написать собственный валидатор для этого (это не так сложно, обычно встроенный валидатор занимает примерно 5-10 строк кода).

...