我觉得我有点困惑,我有一个模型,其中一些字段可以从另一个表中引用它们的详细信息(描述/ 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);
}
我知道它非常明显,因为模型只是查看单个表,但我无法想出如何关联并使用另一个表来从其他参考表中获取描述。
答案 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();
}
}
注意:性别关系必须存在