Yii CDbCriteria и Model - >findAll, как добавить пользовательский столбец?

у меня есть приложение календаря в Yii, где я храню события для каждого пользователя. Я хотел бы динамически создавать заголовок для каждого события.

этот код находится в моем контроллере:

$criteria = new CDbCriteria;
$criteria->select = array('all_day','end','id','start');
$criteria->condition = 'user_id ='.$user->id;
$events = Calendar::model()->findAll($criteria);
foreach($events as $event) {
  $event->title = 'test title';
}
echo CJSON::encode($events);

в моей модели календаря я добавил новое свойство под названием $title:

public $title;

но потом, когда я иду на Эхо JSON, название не появляется...

[{"all_day":false,"end":"-948712553","id":"2","start":"-146154706"}]

что мне нужно сделать, чтобы добавить заголовок в результирующий набор JSON?

2 ответов


это происходит потому, что CJSON::encode кодирование атрибуты каждой модели, и свойства не добавляются к атрибутам модели. Способ добавления пользовательских свойств в модель, это не может быть сделано простым способом.

Я придумал обходной путь, хотя и взял подсказку от ответ:

$events = Calendar::model()->findAll($criteria);
$rows=array();// we need this array
foreach($events as $i=>$event) {
    $event->title = 'test title';
    $rows[$i]=$event->attributes;
    $rows[$i]['title']=$event->title;
}

echo CJSON::encode($rows); // echo $rows instead of $events

код выше должен работать.


вы можете расширить свою модель и предоставить свой новый атрибут следующим образом:

    public function getTitle() {
        return "test title";
    }

    public function getAttributes($names = true) {
        $attrs = parent::getAttributes($names);
        $attrs['title'] = $this->getTitle();

        return $attrs;
    }