Yii:添加自定义字段

Yii:添加自定义字段,yii,custom-attributes,Yii,Custom Attributes,是否有一种向模型添加自定义字段的简单方法?假设我有一个表用户,有3个字段:id、姓名和姓氏。我想要这个: $user = User::model()->findByPk(1); $echo $user->fullName; // echoes name and surname 请注意:我想通过sql添加这个自定义字段,类似于smth $c = new CDbCriteria(); $c->select = 'CONCAT("user".name, "user".surname

是否有一种向模型添加自定义字段的简单方法?假设我有一个表用户,有3个字段:id、姓名和姓氏。我想要这个:

$user = User::model()->findByPk(1);
$echo $user->fullName; // echoes name and surname
请注意:我想通过sql添加这个自定义字段,类似于smth

$c = new CDbCriteria();
$c->select = 'CONCAT("user".name, "user".surname) as fullName'; 
$user = User::model()->find($c);
问题是未设置fullName属性

UPD:

下面是一些更棘手问题的代码——来自另一个表的自定义字段。这是如何做到的:

    $model = Application::model();
    $model->getMetaData()->columns = array_merge($model->getMetaData()->columns, array('fullName' => 'CONCAT("u".name, "u".surname)'));

    $c = new CDbCriteria();
    $c->select = 'CONCAT("u".name, "u".surname) as fullName';
    $c->join = ' left join "user" "u" on "t".responsible_manager_id = "u".id';

    $model->getDbCriteria()->mergeWith($c);

    foreach ($model->findAll() as $o) {
        echo '<pre>';
        print_r($o->fullName);
        echo '</pre>';
    }

可以向用户类添加函数:

public function getMetaData(){
        $data = parent::getMetaData();
        $data->columns['fullName'] = array('name' => 'fullName');
        return $data;
    }
这将返回全名,就像它是数据库中的属性一样。这比在模型中向SQL中添加计算列容易得多。


因此,不推荐使用Yii的_-get方法调用该函数,就像调用常规列一样:$user->fullName当您编写类似$user->fullName的内容时,fullName可能出于一些不同的原因成为$user的一部分。它可以是用户活动记录的成员变量,可以是用户表中的一列,可以是用户拥有的关系的名称,可以是名为getFullName的成员函数。我想就这些了,按照检查的顺序。将$user->fullName转换为$user->getFullName是CComponent的一部分,CComponent是所有Yii类的基类。对于ActiveRecord,首先要做额外的属性/关系检查:不过,这是一个相当骇客的解决方案。。。我不认为手动更改元数据是一种好的方式。
public function getMetaData(){
        $data = parent::getMetaData();
        $data->columns['fullName'] = array('name' => 'fullName');
        return $data;
    }