Использование в методе compare значений null

Предварительное обсуждение найденных ошибок перед отправкой их авторам фреймворка, а также внесение новых предложений.
Ответить
Аватара пользователя
SiZE
Сообщения: 2817
Зарегистрирован: 2011.09.21, 12:39
Откуда: Perm
Контактная информация:

Использование в методе compare значений null

Сообщение SiZE »

Предлагаю заменить условие в compare

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

if($value==='')
    return $this;
на

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

if($value==='' || $value === null)
    return $this;
 
Я использую абстрактное поле fullname для вывода в гриде. Оно по дефолту null. Логика compare подразумевает, что если значение пустое, то условие не попадает в sql запрос, но оно не учитывает, что значение мб null. Поэтому во время загрузки страницы в sql запрос попадает бесполезное условие. Я могу приводить тип вручную, но будет удобно если об этом позаботится Й.

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

class Profile extends CActiveRecord {
    public $fullname;
  
    public function getFullnameValue(){
        if ( $this->fullname === null ) {
            $this->fullname = trim( $this->lastname.' '.$this->firstname.' '.$this->middlename );
        }
        return $this->fullname;
    }
    
    public function search(){
        $criteria = new CDbCriteria;

        $criteria->compare( "CONCAT( lastname, ' ', firstname, ' ', middlename )", $this->fullname, true );

        return new CActiveDataProvider( $this, array(
            'criteria' => $criteria,
        ) );
    }
}
Ответить