Yii2 GridView如何只获取一次相关模型以获得更多属性

时间:2019-02-07 14:40:06

标签: php gridview yii2 lazy-loading

我有一个Yii2 gridview。现在,如果我想使用延迟加载显示相关数据,看起来像这样:

[
    'attribute' => 'relatedName',
    'value' => function ($model) {
        return (($rel = $model->getRelated()->one()) ?
            $rel->name : '')
    ;}
],

如果我想显示同一相关模型的其他属性,则可以像上面一样添加一个新属性,但是Yii将为每行数据再次选择相同的相关模型。 如果没有急切的加载(在这种情况下,这是不可能的),是否可以强制yii为每一行选择一次相关并且使$rel在许多列中可重用?预先感谢!

1 个答案:

答案 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',
],