Yii2:GridView中的Gii生成的属性

时间:2015-01-27 19:04:16

标签: gridview many-to-many yii2 gii

我对Yii2属性如何工作有点困惑。如果我有两个表(比如传统,文化)与一对多关系(即一种传统可能存在于多种文化中)我可以使用Gii生成的代码并进入模型传统类似 @property Culture $ culture ,所以我可以使用(在传统视图索引中):

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

        'id',
        'traditionname',
        'culture.culturename',

        ['class' => 'yii\grid\ActionColumn'],
    ],
    ]); ?>

但是如表传统,book,aux_tradition_book 中的多对多关系呢? Gii会自动生成一个 @property Book [] $ books ,但是如何在GridView中使用这样的数组来显示一堆引用相同传统的书?

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

您可以修改gii来执行此操作,或者您可以使用类似的内容修改生成的文件以用于多对多关系。 Display results while joining tables in yii2

确保您设置了预先加载而不是延迟加载,因为它会使您的网页速度变慢。

答案 1 :(得分:0)

摆弄Yii2 API参考和Mihai P.的解决方案,我终于使用了另一种更短的方法:

use yii\helpers\ArrayHelper;
....
<?= GridView::widget([
   'dataProvider' => $dataProvider,
   'filterModel' => $searchModel,
   'columns' => [
       ['class' => 'yii\grid\SerialColumn'],

       'id',
       'traditionname',
       'culture.culturename',
       [
         'attribute' => 'books',
         'format' => 'raw', //Needed for proper rendering of HTML tags below.
         'value'=>function ($model) {
             return implode('<br/>------<br/>', ArrayHelper::getColumn($model->books, 'bookname'));
          }, 
        ],
       ['class' => 'yii\grid\ActionColumn'],
   ],
]); ?>