Yii:添加自定义字段

时间:2012-02-03 19:25:48

标签: yii custom-attributes

是否有一种向模型添加自定义字段的简单方法?假设我有一个包含3个字段的表“user”:id,name和surname。我想要这个:

$user = User::model()->findByPk(1);
$echo $user->fullName; // echoes name and surname

请注意:我希望通过sql添加此自定义字段,像

一样
$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>';
    }

2 个答案:

答案 0 :(得分:9)

您可以向User类添加一个函数:

public function getFullName() { return $this->name.' '.$this->surname; }

这将返回全名,就好像它是数据库中的属性一样。这比向SQL添加计算列要容易得多。

答案 1 :(得分:0)

在模型中

public function getMetaData(){
        $data = parent::getMetaData();
        $data->columns['fullName'] = array('name' => 'fullName');
        return $data;
    }

因此不推荐