получить пустую CGridView

всем доброго времени суток.

есть форма поиска, размещенная на странице с CGridView. По указанным в форме данным ищутся записи и ajax’ом размещаются в таблице. Проблема в том, что при первом показе формы, надо как-то хитро в таблицу передать пустой CActiveDataProvider. Делать отдельных запрос, возращающий заведомо пустое множество как-то не айс. С yii работаю в первый раз, нагуглить не получилось.

Посмотри код, который генерирует Gii (crud model) там дата провайдер создается в методе search() модели. B увидишь, как решается описанная тобой проблема.

как создается DataProvider я знаю, в него передается модель и критерии. Если критерии не заполнены


$criteria= new CDbCriteria;

$model = new MyModel();

$dp = CActiveDataProvider($model,$criteria);



то появляется ошибка Property "CActiveDataProvider.select" is not defined.

Если критерии просто не указывать


$dp = CActiveDataProvider($model)

, то в провайдере оказываются все записи таблицы. Что я делаю не так?

Не следуешь моим советам. То что ты знаешь как создается дата провайдер, не значит, что не нужно смотреть в примерах как его правильно создавать.

Но мы отошли от основного вопроса

Во первых, это не такая уж и плохая идея. Во вторых ты можешь просто не отображать gridView пока форма поиска не будет заполнена и отправлена.

я ведь смотрю. честно-честно. у меня задача - минимизировать количество запросов к базе, так как планируется большая нагрузка. поэтому добавление compare, который будет гарантировать пустой ответ - не очень хороший для меня вариант.

а вот с неотображением таблицы, пока нет параметра у меня и не получилось. В коде view есть место


$('.search-form form').submit(function(){

        $.fn.yiiGridView.update('mmodel-list-grid', {

                data: $(this).serialize()

        });

   return false;

}

Если ранее таблица не была создана, но и обновить ее не получится. А на что заменить .fn.yiiGridView.update - не знаю

попробуй вот так:




$dp = new CActiveDataProvider('ModelClass');

$dp->setData(array());






$dp = new CActiveDataProvider($model, array('data' => array()));