获取Yii模型中另一个表中的Id说明

获取Yii模型中另一个表中的Id说明,yii,Yii,我想我有点糊涂了,我有一个模型,它的一些字段可以从另一个表中引用它们的细节(描述) 例如 在我看来是这样的 Name A Address A Gender M <<< wherein what I wanted is something like Name A Address A Gender M - Male 我知道这很明显,因为模型只是查看一个表,但我不知道如何关联和使用另一个表,以便能够从其他参考表中获取描述。我要做的是,向我的模型添加一个关系 我假设您有一个性别表的

我想我有点糊涂了,我有一个模型,它的一些字段可以从另一个表中引用它们的细节(描述)

例如

在我看来是这样的

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

Name A
Address A
Gender M - Male

我知道这很明显,因为模型只是查看一个表,但我不知道如何关联和使用另一个表,以便能够从其他参考表中获取描述。

我要做的是,向我的模型添加一个关系

我假设您有一个性别表的模型设置,它被称为性别。我还会将客户表中的“性别”列重命名为genderID或类似名称。我已经为我的例子重新命名了它

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

public function relations()
{
  return array(
    'gender' => array(self::BELONGS_TO, 'Gender', 'genderID'),
   );
}
一旦创建了这种关系,就可以很容易地提取视图中的信息

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

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

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

如果您只需要性别描述,那么您可以使用该关系并显示$model->gender->description;如上述答案所述 如果您想要一个自定义文本,就像您提到的“M-Male”,那么您必须添加一个公共属性,并将其填充到afterFind()方法中


注意:性别关系必须存在

不应该是有一个而不是属于它可以是。我相当肯定两者都可以使用。我总是使用“属于”,但我不确定是否存在性能差异。我从来没有注意到它不好。啊,好吧,有趣的阅读:。如果我不将字段重命名为genderID,我还能做什么,比如说,如果这是一个设计糟糕的产品,它已经是一个生产应用程序,还有其他选择吗?当我尝试$model->gender->description时,我得到了一个“尝试获取非对象属性”的异常。
public function relations()
{
  return array(
    'gender' => array(self::BELONGS_TO, 'Gender', 'genderID'),
   );
}
echo $model->name;
echo $model->address;
echo $model->gender->description;
class Customer extends CActiveRecord {

    public $_gender;

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

}