Yii CDbCriteria and Model-> findAll, how to add a custom column?

I have a calendar app in Yii where I store events for each user. I would like to dynamically create a title for each event.

This code is in my controller:

$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); 

In my Calendar model, I added a new property called $ title:

 public $title; 

But then when I go to the JSON echo, the header is not displayed ...

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

What do I need to do to add a header to the JSON result set?

+7
source share
2 answers

This is because CJSON::encode encodes the attributes of each model, and custom properties are not added to the attributes of the model. The way to add custom properties to the model cannot be performed in a simple way.

I came up with a workaround, although I took the hint of this answer :

 $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 

The above code should work.

+4
source

you can expand your model and provide your new attribute as follows:

  public function getTitle() { return "test title"; } public function getAttributes($names = true) { $attrs = parent::getAttributes($names); $attrs['title'] = $this->getTitle(); return $attrs; } 
+4
source

All Articles