如何使用其他表值

时间:2015-12-02 07:10:49

标签: yii2

假设我有表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中的行更改,则列在网格视图中也会更改。

1 个答案:

答案 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)的特定行。