查看相关表的另一个属性 - yii

时间:2012-10-15 08:07:09

标签: yii yii-components

我想在用户个人资料视图中显示country name而不是country idcountry id在用户个人资料tbl中是FK。)

任何人都可以帮助我吗?

这是我的视图控制器/动作,其中我也有国家模型:

public function actionView($id) 
            {

        $model = new TblUserProfile;

        $model = TblUserProfile::model()->find('user_id=:user_id', array(':user_id' => $id));


      $countrymodel =  new Country;

       $countrymodel = Country::model()->findAll();
//       var_dump($countrymodel->name);
//       die();
        $this->render('view', array(
            'model' => $model ,
            'country' =>$countrymodel

        ));
    }

这是我的观点

<div class="view">

    <b><?php echo CHtml::encode($data->getAttributeLabel('id')); ?>:</b>
       <?php echo CHtml::link(CHtml::encode($data->id), array('view', 'id'=>$data->id)); ?>

    <br />

    <b><?php echo CHtml::encode($data->getAttributeLabel('user_id')); ?>:</b>
    <?php echo CHtml::encode($data->user_id); ?>
    <br />


    <b><?php echo CHtml::encode($data->getAttributeLabel('user_occuption')); ?>:</b>
    <?php echo CHtml::encode($data->user_occuption); ?>

    <br />
    <b><?php

     // $model = TblUserProfile::model()->find('country_id=:country_id', array(':user_id' => $id));


//echo CHtml::encode($model->getAttributeLabel('country')); ?>:</b>
    <?php// echo CHtml::encode($model->name);

        ?>

    <br />

</div>

现在我想在上面的视图中显示国家/地区名称。

这些是国家/地区和用户个人资料表的关系

public function relations() {
        // NOTE: you may need to adjust the relation name and the related
        // class name for the relations automatically generated below.
        return array(
            'user' => array(self::BELONGS_TO, 'TblUser', 'user_id'),
            'country' => array(self::BELONGS_TO, 'country', 'country_id'),
            'state' => array(self::BELONGS_TO, 'state', 'state_id'),
            'city' => array(self::BELONGS_TO, 'city', 'city_id')

        );
    }

3 个答案:

答案 0 :(得分:3)

使用以下代码:

<b><?php echo CHtml::encode($data->country->getAttributeLabel('name')); ?>:</b>
<?php echo CHtml::encode($data->country->name); ?>
<br />

如果您所在的国家/地区模型中的国家/地区名称列为name

由于关系已到位,我们可以使用它来访问每个用户的相关国家/地区。

在详细视图中,它将变为:

// instead of 'country_id'
array(
    'name'=>'country_id',
    'value'=>$model->country->name
)

阅读CDetailView doc,了解如何更改更多内容。

答案 1 :(得分:2)

我会用:

$model = TblUserProfile::model()->with('country')->find('user_id=:user_id', array(':user_id' => $id));

with('country')解释:字符串country来自数组关系键。

然后在视图中显示您将使用:

$model->country->CountryName;
  • $ model contains
  • 国家/地区包含由关键外键加入的国家/地区的“模型”
  • CountryName是国家/地区表格中的列名称

这是以MVC方式执行此操作的推荐方法。我的示例和上面的示例都工作,但上面的一个在视图中有更多的进程/逻辑决策,这打破了MVC的概念,其中Model应该是胖的并且包含所有可能的逻辑/处理,然后控制器将拉出这个数据并将其提供给视图。

答案 2 :(得分:0)

您也可以按照以下回答: 只需将以下代码放入view.php文件

即可
            [
                "attribute"=>"User_Country_Id",
                'value' =>$model->country->conName ,
            ],
            [
                "attribute"=>"User_State_Id",
                'value' =>$model->states->stsName ,
            ],
            [
                "attribute"=>"User_City_Id",
                'value' =>$model->cities->ctName ,
            ],