2017-03-27 9 views
0

私は属性house_idを持っています。私はhouse_idからアドレスを取得してビューに表示したいと思います。yii2属性はビューに値を表示します

マイビュー

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

おかげ

編集:ここでは は、ソリューションを助けをラディッツのおかげです。 モデル:

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

あなたの質問は非常に一般的です。より多くの情報を共有するともっと役に立ちます。しかし、私はあなたが達成しようとしているものを推測します。

住所がモデルハウスの「ハウス」という別のテーブルに格納されていると仮定します。あなたの現在のモデルがプロファイルと呼ばれると仮定します。プロファイルモデルでは、ハウスモデルと1対1または1対多の関係関数が必要です。

との関係を1対1と仮定します。

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

アドレスは列です:今、あなたは、あなたのDetailViewウィジェットで、あなたはこのような何かを行うことができ、両方のテーブルのリレーションが設定されていることを

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

:あなたの関係の機能は何か以下のようになります。あなたの家のテーブルの名前。複数の列を使用する場合は、次のような関数を使用できます。

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