假设我有表A和B。
表A包含列id,名称
id | name
----|-----------
1 | X
2 | Y
3 | Z
表B包含列ID,tax_type,rate
id | tax_type | rate
----|-----------|--------
1 | services|12
2 | vat |3
3 | others |4
我使用表B创建了网格视图,因此网格视图的列是id和name。
但是我想通过获取表B值在网格视图中动态地使用列。
喜欢:
id | name |services | vat | others
----|-------|-----------|-------|--------
1 | X | 12 | 3 | 4
2 | Y | 12 | 3 | 4
3 | Z | 12 | 3 | 4
如果表B中的行更改,则列在网格视图中也会更改。
答案 0 :(得分:0)
您的Gridview
列可以包含任何值。在您的视图中执行以下操作:
首先,从表B中获取数据:
$taxInfo = TableB::find()->indexBy('tax_type')->all();
然后,在列定义的视图中,只需添加:
'columns' => [
'id',
'name',
//...
[
'label' => 'Services',
'value' => function ($model) use $taxInfo {
$taxInfoObject = $taxInfo['services'];
return $taxInfoObject->rate;
}
],
[
'label' => 'VAT',
'value' => function ($model) use $taxInfo {
$taxInfoObject = $taxInfo['vat'];
return $taxInfoObject->rate;
}
],
[
'label' => 'Others',
'value' => function ($model) use $taxInfo {
$taxInfoObject = $taxInfo['others'];
return $taxInfoObject->rate;
}
],
]
注意我们上面定义的$taxInfo
变量如何传递给我们的匿名函数。 (通常这些函数与$model
一起使用,在您的情况下,它将包含表A)的特定行。