Cgridview

есть некая таблица моделей. в таблице есть поле "top", которое по умолчанию NULL. Наличие целочисленного значения в этом поле означает, что товар в топе, а значение указывает на его позицию в топе.

Я хочу вывести таблицу ,в которой будут только топовые товары.

Контроллер:




public function actionAdminTop()

	{

		$model=new SkychatShopItems('searchTop');

		$model->unsetAttributes();  // clear any default values

		if(isset($_GET['SkychatShopItems']))

			$model->attributes=$_GET['SkychatShopItems'];

		$this->render('adminTop',array(

			'model'=>$model,

		));

	}



Модель:




public function searchTop()

	{

		$criteria=new CDbCriteria;


		$criteria->compare('name',$this->name,true);

                $criteria->compare('cat_id',$this->cat_id,false);

		$criteria->compare('description',$this->description,true);

                $criteria->condition = 'top is NOT NULL';

		$criteria->order='top';


		return new CActiveDataProvider($this, array(

			'criteria'=>$criteria,

                        'pagination' => array(

                            'pageSize' => 20,

                        ),

		));

	}



представление:




$this->widget('zii.widgets.grid.CGridView', array(

	'id'=>'skychat-shop-items-grid',

        'ajaxUpdate'=> false,

        'enableSorting'=>false,

	'dataProvider'=>$model->searchTop(),

	'filter'=>$model,

	'columns'=>array.....



проблема в том, что не работает фильтр…

если в моделе убрать


$criteria->condition = 'top is NOT NULL';

то работает, но отбирает все записи из таблицы, а мне надо, чтоб только те, у которых поле "top" не NULL

Вы затираете критерий :)

Вместо $criteria->condition используйте $criteria->addCondition.

спасибо большое ) заработало!!!