0

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

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

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

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

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

谢谢你的帮助。

4

2 回答 2

0

您可以修改 gii 来执行此操作,或者您可以针对多对多关系使用类似的内容修改生成的文件。 在 yii2 中加入表格时显示结果

确保您设置了急切加载而不是延迟加载,因为它会使您的页面非常慢。

于 2015-01-27T23:28:04.307 回答
0

摆弄 Yii2 API Reference 和 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'],
   ],
]); ?>
于 2015-01-28T12:57:10.187 回答