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',
],
我有一个 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',
],