Отображение атрибутов другой модели в CGridView

В Yii я делаю multimodel.My базы данных что-то вроде этого

+++++ Group ++++++ id name +++++ Member ++++++ id group_id firstname lastname membersince 

В контроллере группы я хочу показать атрибуты участника. Все работает нормально, но когда я использую опцию управления в меню, он показывает атрибуты для обеих моделей, но в двух разных сетках. Я хочу показать оба атрибута модели в одном вид сетки. Код для контроллера-члена выглядит следующим образом:

  public function actionAdmin() { $model=new Group('search'); $model->unsetAttributes(); // clear any default values if(isset($_GET['Group'])) { $model->attributes=$_GET['Group']; } $member=new Member('search'); $member->unsetAttributes(); // clear any default values if(isset($_GET['Member'])) { $model->attributes=$_GET['Member']; } $this->render('admin',array( 'model'=>$model, 'member'=>$member, )); } как  public function actionAdmin() { $model=new Group('search'); $model->unsetAttributes(); // clear any default values if(isset($_GET['Group'])) { $model->attributes=$_GET['Group']; } $member=new Member('search'); $member->unsetAttributes(); // clear any default values if(isset($_GET['Member'])) { $model->attributes=$_GET['Member']; } $this->render('admin',array( 'model'=>$model, 'member'=>$member, )); } 

для просмотра в коде администратора группы выглядит так

  <?php $this->widget('zii.widgets.grid.CGridView', array( 'id'=>'member-grid', 'dataProvider'=>$model->search(), 'filter'=>$model, 'columns'=>array( 'id', 'name', array( 'class'=>'CButtonColumn', ), ), )); $this->widget('zii.widgets.grid.CGridView', array( 'id'=>'member-grid', 'dataProvider'=>$member->search(), 'filter'=>$member, 'columns'=>array( 'firstname', 'lastname', array( 'class'=>'CButtonColumn', ), ), )); как  <?php $this->widget('zii.widgets.grid.CGridView', array( 'id'=>'member-grid', 'dataProvider'=>$model->search(), 'filter'=>$model, 'columns'=>array( 'id', 'name', array( 'class'=>'CButtonColumn', ), ), )); $this->widget('zii.widgets.grid.CGridView', array( 'id'=>'member-grid', 'dataProvider'=>$member->search(), 'filter'=>$member, 'columns'=>array( 'firstname', 'lastname', array( 'class'=>'CButtonColumn', ), ), )); 

Здесь я дважды использовал CGridView для отображения моделей для обоих атрибутов. Так может кто-то сказать мне, как показывать модели в одной CGridView. Любая помощь и предложения будут весьма полезными. [Обновлено] Отношения в моделях: групповая модель

 public function relations() { // NOTE: you may need to adjust the relation name and the related // class name for the relations automatically generated below. return array( 'member' => array(self::HAS_MANY, 'Member', 'group_id'), ); } 

Модель участника:

      public function relations() { // NOTE: you may need to adjust the relation name and the related // class name for the relations automatically generated below. return array( 'group' => array(self::BELONGS_TO, 'Group', 'group_id'), ); } 

    Related of "Отображение атрибутов другой модели в CGridView"

    Простой способ доступа к связанным полям модели в yii – использовать что-то вроде этого
    $model->relatedModel->field – это можно использовать, если есть has_one или принадлежит отношению к моделям.
    Таким образом, в вашем случае вы можете получить доступ к имени группы члена, используя код
    $memberModel->group->name
    Но когда вам нужно получить доступ к связанным полям модели для типов has_many или many_many , вам нужно будет сделать что-то вроде
    $model->relatedModel[arrayIndex]->field
    Это связано с тем, что в этом случае существует много связанных моделей, и yii автоматически дает вам связанную модель в массиве.
    В вашем случае у группы есть много членов и для доступа к определенному члену (например, первый член, т.е. arrayIndex = 0 ) группы, вы можете использовать $groupModel->members[0]->firstname
    Теперь, чтобы ответить на ваш точный вопрос, прежде всего, вам не нужно объявлять или инициализировать или передавать модель $ member. Таким образом, действие вашего контроллера может быть

     public function actionAdmin(){ $model=new Group('search'); $model->unsetAttributes(); // clear any default values if(isset($_GET['Group'])){ $model->attributes=$_GET['Group']; } $this->render('admin',array( 'model'=>$model ) ); } 

    Тогда, очевидно, по вашему мнению, вам не нужны два вида сетки

     <?php $this->widget('zii.widgets.grid.CGridView', array( 'id'=>'member-grid', 'dataProvider'=>$model->search(), 'filter'=>$model, 'columns'=>array( 'id', 'name', array( // this is for your related group members of the current group 'name'=>'members.firstname', // this will access the attributeLabel from the member model class, and assign it to your column header 'value'=>'$data->members[0]->firstname', // this will access the current group's 1st member and give out the firstname of that member 'type'=>'raw' // this tells that the value type is raw and no formatting is to be applied to it ), array( 'class'=>'CButtonColumn', ), ), )); 

    Надеюсь это поможет.

    У меня был подобный вопрос, и я решил этот вопрос. здесь вы можете найти ответ

    Структура Yii: использование данных из соответствующих моделей Active Record для поиска