8

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結果セットにタイトルを追加するには何をする必要がありますか?

4

2 に答える 2

5

これは、各モデルの属性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

上記のコードは機能するはずです。

于 2012-08-07T21:58:25.360 に答える
4

モデルを拡張して、次のように新しい属性を提供できます。

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

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

        return $attrs;
    }
于 2013-07-11T23:40:35.690 に答える