dongshangan2074 2014-10-20 20:23
浏览 29
已采纳

如何从CakePHP中的对象中删除嵌套对象?

CakePHP API returns result like this:

{
    "status": "OK",
    "themes": [
        {
            "Theme": {
                "id": "20",
                "user_id": "50",
                "name": "dwdwdw",
                "language_code_from": "cz",
                "language_code_to": "en",
                "type": "CUSTOM",
                "created": "2014-10-19 15:36:05",
                "count_of_cards": 0
            }
        }
    ]
}

I would like to ask, how can in remove nested Theme object to get result like this?:

{
    "status": "OK",
    "themes": [
        {
                "id": "20",
                "user_id": "50",
                "name": "dwdwdw",
                "language_code_from": "cz",
                "language_code_to": "en",
                "type": "CUSTOM",
                "created": "2014-10-19 15:36:05",
                "count_of_cards": 0
        }
    ]
}

Here is my CakePHP code:

$this->Theme->recursive = -1;
                        // GET USER ID
                        $themeData['user_id'] = $isSessionValid;
                        // GET ALL THEMES RELATED TO USER
                        $foundThemes = $this->Theme->find('all', array(
                                'conditions' => array(
                                    'Theme.user_id' => $themeData['user_id'])
                            )
                        );
                        $themes = array();
                        // FOREACH THEMES AND GET COUNT FOR CARDS FOR EACH THEME
                        foreach($foundThemes as $foundTheme) {
                            // GET COUNT OF QUESTIONS FOR ACTUAL THEME
                            $countOfCards = $this->Theme->Card->find('count', array(
                                'conditions' => array(
                                    'Card.theme_id' => $foundTheme['Theme']['id'])
                                )
                            );
                            // APPEND TO ACTUAL ARRAY
                            $foundTheme['Theme']['count_of_cards'] = $countOfCards;
                            array_push($themes,$foundTheme);
                        }

                        // SET SUCCESS RESPOSNSE
                        $this->set(array(
                            'status' => 'OK',
                            'themes' => $themes,
                            '_serialize' => array(
                                'status',
                                'themes',
                            )
                        ));

Many thanks for any advice.

  • 写回答

2条回答 默认 最新

  • doushang4274 2014-10-20 21:22
    关注

    You can manipulate CakePHP's array formats using its built in Hash utility: http://book.cakephp.org/2.0/en/core-utility-libraries/hash.html#Hash

    What I would do would be to flatten the results:

    $results = Hash::flatten($results);
    

    Your data array will end up as a single dimensional array looking like this:

    $results = array(
        'status' => 'OK'
         'themes.0.Theme.id' => 20,
         ...
         'themes.1.Theme.id' => 21,
         ...
    );
    

    You can then use string replace to remove "Theme" from your keys:

    $keys = array_keys($results);
    $keys = str_replace('Theme.', '', $keys);
    

    Then you can use Hash::expand to get your original array, now formatted how you want:

    $results = Hash::expand(array_combine($keys, array_values($results)));
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥60 求一个简单的网页(标签-安全|关键词-上传)
  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法
  • ¥15 基于卷积神经网络的声纹识别
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图