如何在Yii2 GridView和DetailView中显示有很多关系记录?

sud*_*ee_ 5 php gridview detailview yii2

我想展示员工在详细视图和gridview中有很多兴趣爱好.

但我得到了一个错误异常 Trying to get property of non-object

这是我的架构代码模型:

应用程序\型号\ TblDataStaff

在此输入图像描述

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

查看代码:查看.

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

指数:

<?= 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'],
        ],]);?>
Run Code Online (Sandbox Code Playgroud)

如何展示员工的许多爱好?

soj*_*oju 7

没什么奇怪的,你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'));
Run Code Online (Sandbox Code Playgroud)

用于DetailView:

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

用于GridView:

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