我有一个Yii2 gridview。现在,如果我想使用延迟加载显示相关数据,看起来像这样:
[
'attribute' => 'relatedName',
'value' => function ($model) {
return (($rel = $model->getRelated()->one()) ?
$rel->name : '')
;}
],
如果我想显示同一相关模型的其他属性,则可以像上面一样添加一个新属性,但是Yii将为每行数据再次选择相同的相关模型。
如果没有急切的加载(在这种情况下,这是不可能的),是否可以强制yii为每一行选择一次相关并且使$rel
在许多列中可重用?预先感谢!
答案 0 :(得分:3)
$model->getRelated()
返回ActiveQuery对象。如果您想一次加载相关模型,可以使用$model->related
而不是$model->getRelated()->one()
来完成。例如:
[
'attribute' => 'relatedName',
'value' => function ($model) {
return is_null($model->related) ? '' : $model->related->name;
}
],
或更简单的方式
[
'attribute' => 'related.name',
],