Filter В Cgridview

Привет всем. Долго бьюсь уже с filter для связанных таблиц в cgridview, но он так и не хочет работать.(ввожу в поле поиска нажимаю интер - ноль реакции). Делаю так:





//controller

        $model = new Users('search');

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

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

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

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

            'model' => $model,

        ));

//model


//relations

return array( 'child'=>array(self::HAS_ONE, 'Childs', 'uid')


//search делаю для теста, чтобы пока по одному полю искала 

    public function search() {

        $criteria = new CDbCriteria;

        $criteria->condition = 'role=:role';

        $criteria->params = array(':role' => 'child');

        $criteria->with = array( 'child' );

        //$criteria->addSearchCondition('child.class', $this->class, true); 

        $criteria->compare('id', $this->id);

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

        return new CActiveDataProvider($this, array(

                    'criteria' => $criteria,

                    'sort' => array(

                        'attributes' => array(

                            'id',

                            'firstname',

                            'lastname',

                            'secondname',

                            'child.class',

                            'child.school'

                        )

                    ),                    

                ));

    }


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


<?php

$data= new Users();//::model()->with('child');

$dataProvider=$data->search();

$gridColumns = array(

    array('name'=>'id', 'header'=>'#', 'htmlOptions'=>array('style'=>'width: 60px')),

    array('name'=>'firstname', 'header'=>'Имя'),

        array('name'=>'secondname', 'header'=>'Фамилия'),

        array('name'=>'lastname', 'header'=>'Отчество'),

    array(

            'name'=>'child.school',

            'header'=>'Школа',

            'value'=>'$data->child->school',

            ),

        array(

            'name'=>'child.class',

            'header'=>'Класс',

            'value'=>'$data->child->class',

            //'filter'=> CHtml::activeTextField($data, 'school'),

            ), 

         array(

            //'name'=>'confirm',

            'header'=>'Активация',

            'value'=>'$data->child->confirm'

         ),

    array(

        'htmlOptions' => array('nowrap'=>'nowrap'),

        'class'=>'bootstrap.widgets.TbButtonColumn',

                'viewButtonUrl'=>null,

        'updateButtonUrl'=>null,

        'deleteButtonUrl'=>null,

    )

);


$this->widget('bootstrap.widgets.TbGridView', array(

    'dataProvider' => $dataProvider,

    'columns' => $gridColumns,

    'type' => 'bordered',

    'filter' =>$model,

));

?>



Вот. Помогите пожалуйста и заранее спасибо!

P.S. чуть не забыл - пытаюсь добиться поиска хоть по одному полю из основной таблицы - все-равно не работает.

Если я правильно понимаю, то вам сюда.

Подобная проблема поднималась также в как связанные данные вывести в одной таблице в представлении

Окей, спасибо. Вроде я все так и делаю, но попробую еще раз так. Видимо где-то мелкая ошибка затисалась.

Да, я делаю все также. Но у меня проблема немного другого характера. Поле у меня отображается, но когда я ввожу там информацию и нажимаю интер ничего не происходит: страница ни обновляется(а должна ведь), запросы ни какие не посылаются.

Но по приведенному вами коду не видно этого. Нет объявления свойств класса, не модифицирована search()…

Еще заметил странную штуку


$data= new Users();//::model()->with('child');

Вы же передали $model из контроллера, где присваивали значение фильтров. Так почему вместо её использования вы создаете и используете совершенно новый объект?

Так, это исправил. Тут оказывается в консоли браузера ошибка выдается:

Может быть в следствии этого ошибка?

Может и тут, но понятия не имею как её исправлять.