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

Yii2 gridview how to get related model only once for more attributes

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

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

如果我想显示同一个相关模型的附加属性,我可以像上面那样添加一个新属性,但是 Yii 会为每一行数据再次 selecting 同一个相关模型. 如果没有预先加载(不幸的是在这种情况下是不可能的)是否有可能强制 yii 对每行只与 select 相关一次并使 $rel 在许多列中可重用?提前致谢!

$model->getRelated() returns ActiveQuery 对象。如果你想加载一个相关的模型,你可以使用 $model->related 而不是 $model->getRelated()->one() 来完成。例如:

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

或者更简单的方法

[
    'attribute' => 'related.name',
],