我有一个属性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)
],
],
]) ?>
答案 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;
}
],
]
]) ?>