Как показать имеет много записей отношений в Yii2 GridView и DetailView?

Я хочу показать, что у персонала есть много увлечений из настольных хобби в подробном представлении и в виде сетки.

Но я получил исключение ошибки Trying to get property of non-object

Вот моя модель кода схемы:

приложение \ модель \ TblDataStaff

введите описание изображения здесь

    ....
public function getTblDataHobis()
{
return $this->hasMany(TblDataHobies::className(), ['id_staff' => 'id']);
}

Посмотреть код: посмотреть.

<?= DetailView::widget([
'model' => $model,
'attributes' => [
...
['attribute'=>'namHob','value'=>$model->tblDataHobis->id],
...
],
]) ?>

индекс:

<?= GridView::widget([
'dataProvider' => $dataProvider,
//'filterModel' => $searchModel,
'columns' => [
['class' => 'yii\grid\SerialColumn'],
......
['attribute'=>'namHob','value'=>function($namHob){return $namHob->tblDataHobis->name_hobby;},],
.....
['class' => 'yii\grid\ActionColumn'],
],]);?>

Как показать много увлечений персонала?

5

Решение

Ничего странного, у вас есть Trying to get property of non-object ошибка просто потому что $model->tblDataHobis вернуть массив TblDataHobies объекты.

Вы можете просто попробовать это:

// display hobbies names separated with commas
echo implode(', ', \yii\helpers\ArrayHelper::map($model->tblDataHobis, 'id', 'name_hobby'));

За DetailView :

'value' => implode(\yii\helpers\ArrayHelper::map($model->tblDataHobis, 'id', 'name_hobby')),

За GridView :

'value' => function($model) {
return implode(\yii\helpers\ArrayHelper::map($model->tblDataHobis, 'id', 'name_hobby')),
},
7

Другие решения

Попробуйте с:

<?= DetailView::widget([
'model' => $model,
'attributes' => [

[
'header' => 'number of hobbies',
'value' => function($data) {
return $data->getTblDataHobis()->count();
}
]

]) ?>
0

По вопросам рекламы [email protected]