2014-10-29 4 views
1

У меня есть некоторые данные в буксировать разные модели одного Иова (департамент, компания ...) и Employee (EmpName, EmpAge, EmpPosition ...)Yii2 Как использовать две различные модели в одном GridView

Как может Я использую обе модели внутри одного GridView, чтобы иметь таблицу как (EmpName, EmpPosition, компания, отдел ....)

Я знаю, как создать GridView из одной модели

<?= GridView::widget([ 
     'dataProvider' => $dataProvider, 
     'columns' => [ 
      ['class' => 'yii\grid\SerialColumn'], 

      'EmpName', 
      'EmpPosition', ...........  ], 
]); ?> 

ответ

1

Если вы определили отношение в своей модели Employee, чтобы получить ссылку на вашу модель задания, это можно сделать с помощью

<?= GridView::widget([ 
     'dataProvider' => $dataProvider, 
     'columns' => [ 
      ['class' => 'yii\grid\SerialColumn'], 
      'EmpName', 
      'EmpPosition', 
      [ 
       'name' => 'Company', 
       'value' => '$data->Job->Company', 
      ], 
      ...........  ], 
]); ?> 

модель Сотрудник

:: 
function getJob() { 
    /* 
    * Assumptions: 
    * - foreign key to job in employee table is named job_id 
    * - primary key in job table is named id 
    */ 
    return this->hasOne(Job::classname(), ['id' => 'job_id']); 
} 
:: 

См Yii2 Documentation для получения дополнительной информации

+0

О, хорошо, но я не определил отношение в модели Employee, как я могу это сделать? thx – Test404

+1

@ Test404 См. Модель сотрудника в ответе. – Barry

1

для меня это не работает с этим:

[ 

'name' => 'Company', 
'value' => '$data->Job->Company', 
], 

он правильно работал с:

[ 

'label' => 'Company', 
'value' => function ($data){ return $data->Job->Company; }, 
], 
0

Yii2 GridView DataColumn поддерживает точечную нотацию для модельных отношений

[ 
    'name' => 'Company', 
    'value' => 'job.Company', 
], 

Это короче в синтаксисе и избегает исключения, когда $data->Job = null.

Смежные вопросы