Фильтрация в CGridView по полям связанной таблицы

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

Возникла небольшая проблема с отображением в одном CGridView данных из двух связанных таблиц 1к1. Заключается она в том, что над колонками связанной таблицы не показываются поля для фильтрации. При этом сортировка работает.

Немного кода (только то, что добавлял я, остальное автоматически через gii):




///////////////////////////////

//Модель 1 (Clients)


/**

 * @property string $id

 * @property string $name

 */

class Clients extends CActiveRecord

{

    .....


    public function relations()

    {

        return array(

            'stats'=>array(self::HAS_ONE, 'ClientStats', 'client_id'),

        );

    }


    .....


    public function search()

    {

        $criteria=new CDbCriteria;

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

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

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

        $criteria->compare('stats.stat1',$this->stats->stat1);

        $criteria->compare('stats.stat2',$this->stats->stat2);


        return new CActiveDataProvider(get_class($this), array(

            'criteria'=>$criteria,

            'sort'=>array('attributes'=>array(

                            'id',

                            'name',

                            'stats.stat1',

                            'stats.stat2',

            )),

        ));

    }

}




///////////////////////////////

//Модель 2 (ClientStats)


/**

 * @property string $client_id

 * @property integer $stat1

 * @property integer $stat2

 */

class ClientStats extends CActiveRecord

{

    .....

}




///////////////////////////////

// файл views/clients/admin.php


.....


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

        'id'=>'clients-grid',

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

        'filter'=>$model,

        'columns'=>array(

                'id',

                'name',

                'stats.stat1',

                'stats.stat2',

                array(

                    'class'=>'CButtonColumn',

                ),

        ),

)); ?>


.....



Спасибо!

Тут зависит от того, какое именно поле нужно показывать. Если это поле-связка, то нужно указать имя этого поля и в value указывать $data->relation->field.

Если же это просто поля из связанной таблицы, я пока нашел только один способ это сделать, что бы фильтры работали, а именно:

В модели делаем public свойство, желательно с каким нить префиксом типа public ___virtualField, а дальше уже в CGridView




array('name' => '___virtualField', 'value' => '$data->relation->field')



В метод search модели надо соотвественно добавить:




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

$criteria->together = true;

$criteria->search('relation.field', $this->___virtualField);