Как сортировать и искать в столбце 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',
),
Таким образом, я могу искать и сортировать по имени группы!
Я надеюсь, что этот пост может быть полезным для кого-то