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条)

报告相同问题?

悬赏问题

  • ¥15 BP神经网络控制倒立摆
  • ¥20 要这个数学建模编程的代码 并且能完整允许出来结果 完整的过程和数据的结果
  • ¥15 html5+css和javascript有人可以帮吗?图片要怎么插入代码里面啊
  • ¥30 Unity接入微信SDK 无法开启摄像头
  • ¥20 有偿 写代码 要用特定的软件anaconda 里的jvpyter 用python3写
  • ¥20 cad图纸,chx-3六轴码垛机器人
  • ¥15 移动摄像头专网需要解vlan
  • ¥20 access多表提取相同字段数据并合并
  • ¥20 基于MSP430f5529的MPU6050驱动,求出欧拉角
  • ¥20 Java-Oj-桌布的计算