Yii:ORMオブジェクトをJSONデータに変換

1697 ワード

対外的なサービスインタフェースが必要な場合には、データベースから検索されたデータオブジェクトをJSON形式のデータに変換することがよくあります
Yiiでは、次のような有用な方法が提供されています.
CJSON::encode($object)
しかし、このメソッドのデフォルト実装では、関連オブジェクトのデータを含めることはできません.
関連データを出力するには、CJSONを派生させ、encodeメソッドを書き換える必要があります.
                        case 'object':
                                if ($var instanceof Traversable)
                                {
                                        $vars = array();
                                        foreach ($var as $k=>$v)
                                                $vars[$k] = $v;
                                }
                                else
                                        $vars = get_object_vars($var);
                                        
                                // related
                                foreach ($var->relations() as $key => $related)
                                {
                                        if ($var->hasRelated($key))
                                        {
                                                $vars[$key] = $var->$key;
                                        }
                                }
                                
                                return '{' .
                                           join(',', array_map(array('CJSON', 'nameValue'),
                                                                                   array_keys($vars),
                                                                                   array_values($vars)))
                                           . '}';

iefreer