yii2属性在视图中显示值

时间:2017-03-27 00:54:06

标签: yii2

我有一个属性house_id,我想从house_id获取地址并将其显示在视图中。

我的观点

<?= DetailView::widget([
    'model' => $model,
    'attributes' => [
        'id',
        'house_id',
    ],
]) ?>

由于

编辑: 这是解决方案感谢Raditz的帮助。 型号:

public static function getHouseAddressPayroll($house_id)
{
    if ($house_id) { $house = House::findOne($house_id);
        $address = $house->address_line_1.', '.$house->city.', '.$house->state.' '.$house->zipcode;
        return $address;
    } else {
       $data = "N/A";
        return $data;
    }
}

查看:

<?= DetailView::widget([
    'model' => $model,
    'attributes' => [
        'id',
        [
        'attribute' => 'first_house',
            'value' =>  House::getHouseAddressPayroll($model->first_house)
        ],
        [
        'attribute' => 'second_house',
            'value' =>  House::getHouseAddressPayroll($model->second_house)
        ],
        [
        'attribute' => 'third_house',
            'value' =>  House::getHouseAddressPayroll($model->third_house)
        ],
        [
        'attribute' => 'fourth_house',
            'value' =>  House::getHouseAddressPayroll($model->fourth_house)
        ],

    ],
]) ?>

1 个答案:

答案 0 :(得分:1)

你的问题很通用。如果您分享更多信息会更有帮助。但我会猜测你想要达到的目标。

我假设地址存储在另一个名为“house”的表中,其中包含一个模型House。假设您当前的模型名为Profile。在Profile模型中,您需要与House模型具有1对1或1对多关系函数。

假设关系是1比1。你的关系函数看起来如下所示:

public function getHouse()
{
    return $this->hasOne(House::className(), ['id' => 'house_id']);
}

现在您已经在DetailView小部件中设置了两个表的关系,您可以执行以下操作:

<?= DetailView::widget([
    'model' => $model,
    'attributes' => [
      'id',
      'house.address'
    ]
]) ?>

地址是您家门表中的列名称。如果您要使用多个列,则可以使用如下函数:

<?= DetailView::widget([
    'model' => $model,
    'attributes' => [
       'id',
       [                     
         'attribute' => 'house_id',
         'value' => function ($model, $widget){
            return $model->house->address1.'<br/>'.$model->house->address2;
         }
       ],
    ]
]) ?>