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;
}