Yii: добавление пользовательских полей - PullRequest
4 голосов
/ 03 февраля 2012

Есть ли простой способ добавления пользовательских полей в модель? Скажем, у меня есть таблица «пользователь» с 3 полями: идентификатор, имя и фамилия. Я хочу это:

$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

вот код для немного более сложной задачи - настраиваемое поле из другой таблицы. Вот как это делается:

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

Ответы [ 2 ]

9 голосов
/ 04 февраля 2012

Вы можете добавить функцию в класс User:

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

Это вернет полное имя, как если бы оно было атрибутом из базы данных. Это гораздо проще, чем добавить вычисляемый столбец в SQL.

0 голосов
/ 26 апреля 2013

в модели

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

Таким образом, не рекомендуется

...