覆盖Yii中的ActiveRecord get属性

覆盖Yii中的ActiveRecord get属性,activerecord,yii,overriding,Activerecord,Yii,Overriding,在一些属性的Yii模型中,当不动产为null或空时,我希望返回一些默认值 例如,假设我有一个display\u name属性。如果尚未设置,我希望返回第一个\u名称 到目前为止,我一直在使用的工作是创建一个具有不同名称的新方法,并调用这个方法。不过,如果我能通过正常方式调用$model->display\u name来实现这一点,那就太好了。我可能已经找到了自己的答案。我正在重写\uu get(),以检查这是否是我要查找的属性。我不确定这是否被视为“最佳做法” 我可能已经找到了自己的答案。我正在

在一些属性的Yii模型中,当不动产为null或空时,我希望返回一些默认值

例如,假设我有一个
display\u name
属性。如果尚未设置,我希望返回
第一个\u名称


到目前为止,我一直在使用的工作是创建一个具有不同名称的新方法,并调用这个方法。不过,如果我能通过正常方式调用
$model->display\u name
来实现这一点,那就太好了。

我可能已经找到了自己的答案。我正在重写
\uu get()
,以检查这是否是我要查找的属性。我不确定这是否被视为“最佳做法”


我可能已经找到了自己的答案。我正在重写
\uu get()
,以检查这是否是我要查找的属性。我不确定这是否被视为“最佳做法”


扩展
CComponent
的类,包括
CModel
CActiveRecord
首先将查找getter方法

在您的示例中,必须定义一个getter函数:

public function getdisplay_name() {
    if (! empty($this->display_name)) {
        return $this->display_name;
    } else {
        return $this->first_name;
    }
}

扩展
CComponent
的类,包括
CModel
CActiveRecord
首先将查找getter方法

在您的示例中,必须定义一个getter函数:

public function getdisplay_name() {
    if (! empty($this->display_name)) {
        return $this->display_name;
    } else {
        return $this->first_name;
    }
}

这将导致后面的大开关案例陈述,我在回答中描述了一个更简单更干净的解决方案,正如我在问题中提到的,我已经有了一个类似的解决方案。但我试着不必记住所有的备用函数,加上一些模块或扩展可能不是我编写的。我想这在版本2中会有所改变。如果我们定义了一个自定义的
getX()
方法,那么,即使模型已经定义了一个x属性,也应该调用我们的覆盖方法。这将导致后面的大开关案例语句,我在回答中描述了一个更简单、更清晰的解决方案正如我在问题中提到的,我已经有了一个类似的解决方案。但我试着不必记住所有的备用函数,加上一些模块或扩展可能不是我编写的。我想这在版本2中会有所改变。如果我们定义了一个自定义的
getX()
方法,那么即使模型已经定义了一个x属性,也应该调用我们的覆盖方法。请检查CActiveRecord::\uu get()implementation。当display\u name是数据库属性时,您的示例将不适用于CActiveRecord实例。请检查CActiveRecord::\uu get()implementation。当display_name是数据库属性时,您的示例不适用于CActiveRecord实例。