How to sort and search in a CGridView column with a two-level 1-N relation?

588 views Asked by At

This question directly follow this other

I have this tables: Groups, Users, Reports

Relations: Groups 1 -> N Users ** and ** Users 1 -> N Reports

I already have this relation In Report model:

'user' => array(self::BELONGS_TO, 'Users', 'userId'),

And this in User model

'group' => array(self::BELONGS_TO, 'Gruppi', 'groupId'),

In Report Model I have this:

$criteria=new CDbCriteria;
$criteria->with = array ('user');

In the admin view of report I'm using a CGridView.

I'm using user.group.name for showing group name, but how to search (by DropDown) and sort !?

1

There are 1 answers

0
realtebo On BEST ANSWER

In admin view, instead of user.group.name, i'm using

array (
        'name' => 'groupId',
        'value' => '$data->user->group->name',
        'filter' => Chtml::listData( Groups::model()->findAll() ,'id','name')
    ),

In Report model I added a class field

public $groupId;

In Report rules

    array('groupId','safe','on'=>'search'),

In Report search

....
$criteria->with = array ('user.group');
....
$criteria->compare('user.groupId',$this->groupId);
....
[in sort array]
'groupId'=>array(
            'asc' =>'group.name',
                'desc'=>'group.name DESC',
 ),

In this way I can search, and sort, by group name !

I hope this post can be usefull to someon