我在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结果集?
答案 0 :(得分:5)
这是因为CJSON::encode
对每个模型的属性进行编码,而自定义属性未添加到模型的属性中。自定义属性添加到模型的方式,这不能以直接的方式完成。
虽然从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
上面的代码应该有用。
答案 1 :(得分:4)
您可以扩展模型并提供如下所示的新属性:
public function getTitle() {
return "test title";
}
public function getAttributes($names = true) {
$attrs = parent::getAttributes($names);
$attrs['title'] = $this->getTitle();
return $attrs;
}