在Yii模型的另一个表中获取Id的描述

时间:2014-04-01 09:35:51

标签: yii

我觉得我有点困惑,我有一个模型,其中一些字段可以从另一个表中引用它们的详细信息(描述/ s)。

例如。

**tblCustomers**
_______________________
Name | Address | Gender
-----------------------
  A  |   A     |  M
  B  |   B     |  M
  C  |   C     |  F

**tblGender**
__________________
Code | Description
------------------
 M   |  Male
 F   | Female

在我看来,它的外观如何

Name A
Address A
Gender M <<< wherein what I wanted is something like

Name A
Address A
Gender M - Male

在我的模型中,我目前正在做这样的事情:

public function search($_id,$_curLevel)
{
// @todo Please modify the following code to remove attributes that should not be searched.

  $criteria=new CDbCriteria;
  $criteria->compare('Name',$this->name);
  $criteria->compare('Address',$this->address);
  $criteria->compare('Gender',$this->gender,true);
}

我知道它非常明显,因为模型只是查看单个表,但我无法想出如何关联并使用另一个表来从其他参考表中获取描述。

2 个答案:

答案 0 :(得分:1)

我这样做的方法是为我的模型添加一个关系。

我假设你有一个性别表的模型设置,它被称为性别。我还会重命名你的性别&#39; customer表中的列为genderID或类似名称。我已将其重命名为我的例子。

将此代码添加到您的客户模型:

public function relations()
{
  return array(
    'gender' => array(self::BELONGS_TO, 'Gender', 'genderID'),
   );
}

然后,一旦创建了这种关系,就可以很容易地在视图中提取信息。

您已拥有该模型,因此现在视图如下所示:

echo $model->name;
echo $model->address;
echo $model->gender->description;

请注意&#39;性别&#39;在上面这一行中指的是性别&#39;我们创建的关系,而不是您命名的列&#39;性别&#39;在描述表中(我将其重命名为genderID)。

答案 1 :(得分:0)

如果您只是想要性别描述,那么您可以使用该关系并显示$ model-&gt; gender-&gt; description;如上面的答案所述 如果你想要一个自定义文本,你提到“M - 男”,那么你必须添加一个公共属性并填入afterFind()方法

class Customer extends CActiveRecord {

    public $_gender;

    public function afterFind() {
       $this->_gender = $this->gender . ' - ' . $this->gender->description;
       return parent::afterFind();
    }

}

注意:性别关系必须存在