Как сортировать и искать в столбце CGridView с двухуровневым отношением 1-N?

Этот вопрос непосредственно следует за этим другим

У меня есть эти таблицы: группы, пользователи, отчеты

Отношения: группы 1 -> N пользователей ** и ** пользователи 1 -> N отчетов

У меня уже есть эта связь в модели отчета:

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

И это в модели пользователя

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

В модели отчета у меня есть это:

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

В представлении отчета администратора я использую CGridView.

Я использую user.group.name для отображения имени группы, но как искать (по DropDown) и сортировать!?

1 ответ

Решение

В представлении администратора вместо user.group.name я использую

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

В модели отчета я добавил поле класса

public $groupId;

В правилах отчета

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

В поиске отчетов

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

Таким образом, я могу искать и сортировать по имени группы!

Я надеюсь, что этот пост может быть полезным для кого-то

Другие вопросы по тегам