@EVOSandru6

Как правильно организовать search модели для CGridView в Yii1?

Добрый день,

Есть модель Users, я хочу чтобы в CGridView выводились только активные пользователи, в то же время я хочу чтобы фильтры по колонкам работали:

class Users extends ActiveRecord
{
...

public function search()
	{
		$criteria   =   new CDbCriteria;
		$criteria->compare('id'              ,$this->id);
		$criteria->compare('name'            ,$this->name,true);
		$criteria->compare('role_id'         ,$this->role_id);
		$criteria->compare('email'           ,$this->email,true);
		$criteria->compare('password'        ,$this->password,true);
		$criteria->compare('telephone'       ,$this->telephone,true);
		$criteria->compare('sys_date'        ,$this->sys_date);
		$criteria->compare('sys_date_update' ,$this->sys_date_update);
		$criteria->compare('sys_user'        ,$this->sys_user);
                $criteria->compare('exist'           ,$this->exist);
                $criteria->condition = 'exist != 2';

        return new CActiveDataProvider($this,
            [
                'criteria'  =>  $criteria,
                'pagination'=>
                [
                    'pageSize'=>100
                ],
            ]);
	}
...

}


Проблема такая:

Если я оставляю так как есть, то вывод осуществляется правильно - как мне надо (если exist == 2 , то пользователь помещен в корзину).

Но если пытаюсь осуществить фильтр по любому полю, то ловлю ошибку:

PDOException
SQLSTATE[HY093]: Invalid parameter number: :ycp0 (C:\OpenServer\domains\hotel\framework\db\CDbCommand.php:275)

Если в методе search() комментирую строку:

// $criteria->condition = 'exist != 2';

То работает фильтр, но выходят все пользователи, из корзины тоже.

Посоветуйте как поправить мою ситуацию.
  • Вопрос задан
  • 129 просмотров
Пригласить эксперта
Ответы на вопрос 1
AloneCoder
@AloneCoder
[object Object]
public function search()
  {
    $criteria   =   new CDbCriteria;
    $criteria->compare('id'              ,$this->id);
    $criteria->compare('name'            ,$this->name,true);
    $criteria->compare('role_id'         ,$this->role_id);
    $criteria->compare('email'           ,$this->email,true);
    $criteria->compare('password'        ,$this->password,true);
    $criteria->compare('telephone'       ,$this->telephone,true);
    $criteria->compare('sys_date'        ,$this->sys_date);
    $criteria->compare('sys_date_update' ,$this->sys_date_update);
    $criteria->compare('sys_user'        ,$this->sys_user);
    $criteria->compare('exist', '<>' . 2);

        return new CActiveDataProvider($this,
            [
                'criteria'  =>  $criteria,
                'pagination'=>
                [
                    'pageSize'=>100
                ],
            ]);
  }
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы