Ошибка в CUniqueValidator

Уже исправленные репорты или принятые предложения
Закрыто
Yiivgeny
Сообщения: 80
Зарегистрирован: 2010.11.24, 10:39

Ошибка в CUniqueValidator

Сообщение Yiivgeny »

Undefined offset: 0 in framework/validators/CUniqueValidator.php(108)
$exists=$objects[0]->getPrimaryKey()!=$object->getOldPrimaryKey();
Такой ошибки можно добиться применяя этот валидатор к модели у которой в defaultScope есть параметр index.
Сделать минимальный фикс можно применяя вместо обращения к индексу функцию array_shift.

Код: Выделить всё

        if(!$object instanceof CActiveRecord || $object->isNewRecord || $object->tableName()!==$finder->tableName())
            $exists=$finder->exists($criteria);
        else
        {
            $criteria->limit=2;
            $objects=$finder->findAll($criteria);
            $n=count($objects);
            if($n===1)
            {
                if($column->isPrimaryKey)  // primary key is modified and not unique
                    $exists=$object->getOldPrimaryKey()!=$object->getPrimaryKey();
                else // non-primary key, need to exclude the current record based on PK
                    //$exists=$objects[0]->getPrimaryKey()!=$object->getOldPrimaryKey();
                    $exists=array_shift($objects)->getPrimaryKey()!=$object->getOldPrimaryKey();
            }
            else
                $exists=$n>1;
        } 
Глобально, возможно, стоит делать resetScope перед поиском моделей в этом участке кода, хотя тут от задумки авторов фреймворка зависит.
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Ошибка в CUniqueValidator

Сообщение samdark »

Можно пример такого defaultScope?
Yiivgeny
Сообщения: 80
Зарегистрирован: 2010.11.24, 10:39

Re: Ошибка в CUniqueValidator

Сообщение Yiivgeny »

Конкретно мой случай выглядит так:

Код: Выделить всё

public function defaultScope() {
        return array(
            'index' => 'user_id',
            'with' => array('roles'),
            'order' => '`username` ASC',
        );
    } 
Если убрать index ошибка естественно пропадает.
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Ошибка в CUniqueValidator

Сообщение samdark »

Fixed.
Закрыто