覆盖ActiveRecord获取Yii中的属性

时间:2012-11-15 09:40:25

标签: activerecord yii override

在我的Yii模型中,对于某些属性,我想在real属性为null或为空时返回一些默认值。

例如说我有一个display_name属性。如果尚未设置,我想返回first_name

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

2 个答案:

答案 0 :(得分:3)

我可能找到了自己的答案。我正在覆盖__get()以检查这是否是我正在寻找的属性。我不确定这被认为是“最佳实践”。

public function __get($name) {
            $current = parent::__get($name);
            switch($name){
                case 'display_name':
                    if(empty($current)){
                        return $this->first_name;
                    }
                    else{
                        return $current;
                    }
                    break;
                default:
                    return $current;
            }
        }

答案 1 :(得分:0)

扩展CComponent的类,包括CModelCActiveRecord,首先会查找getter方法。

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

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