Yii2:GridView 中 Gii 生成的属性
Yii2: Gii-generated attributes in GridView
我对 Yii2 属性的工作原理有点困惑。如果我有两个具有一对多关系的表(比如 tradition,culture)(即一个传统可能存在于多种文化中),我可以使用 Gii 生成的代码并进入模型Tradition 类似于 @属性 Culture $culture,所以我可以使用(在 Tradition查看索引):
<?= GridView::widget([
'dataProvider' => $dataProvider,
'filterModel' => $searchModel,
'columns' => [
['class' => 'yii\grid\SerialColumn'],
'id',
'traditionname',
'culture.culturename',
['class' => 'yii\grid\ActionColumn'],
],
]); ?>
但是表 tradition、book、aux_tradition_book 中的多对多关系呢? Gii 会自动生成一个 @属性 Book[] $books,但是如何在 GridView 中使用这样的数组来显示一堆引用相同传统的书籍?
感谢您的帮助。
您可以修改 gii 来执行此操作,或者您可以针对多对多关系使用类似这样的内容修改生成的文件。
确保你设置的是预加载而不是延迟加载,因为它会使你的页面非常慢。
摆弄 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'],
],
]); ?>
我对 Yii2 属性的工作原理有点困惑。如果我有两个具有一对多关系的表(比如 tradition,culture)(即一个传统可能存在于多种文化中),我可以使用 Gii 生成的代码并进入模型Tradition 类似于 @属性 Culture $culture,所以我可以使用(在 Tradition查看索引):
<?= GridView::widget([
'dataProvider' => $dataProvider,
'filterModel' => $searchModel,
'columns' => [
['class' => 'yii\grid\SerialColumn'],
'id',
'traditionname',
'culture.culturename',
['class' => 'yii\grid\ActionColumn'],
],
]); ?>
但是表 tradition、book、aux_tradition_book 中的多对多关系呢? Gii 会自动生成一个 @属性 Book[] $books,但是如何在 GridView 中使用这样的数组来显示一堆引用相同传统的书籍?
感谢您的帮助。
您可以修改 gii 来执行此操作,或者您可以针对多对多关系使用类似这样的内容修改生成的文件。
确保你设置的是预加载而不是延迟加载,因为它会使你的页面非常慢。
摆弄 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'],
],
]); ?>