2014-10-20 4 views
0

CakePHP возвращает API результат:Как удалить вложенный объект из объекта в CakePHP?

{ 
    "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 
      } 
     } 
    ] 
} 

Я хотел бы спросить, как можно в отдалении вложенными Theme объект, чтобы получить результат, как это ?:

{ 
    "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 
     } 
    ] 
} 

Вот мой код CakePHP :

$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', 
          ) 
         )); 

Большое спасибо за советы.

+0

Вы считаете, что вам не нравится, что значение 'set' возвращается к вашему представлению? Если это так - вы пытались сменить ключ _themes_ на ''themes' => $ themes ['Theme']' – AgRizzo

ответ

2

Вы можете управлять форматами массива CakePHP, используя встроенный в Hash утилиты: http://book.cakephp.org/2.0/en/core-utility-libraries/hash.html#Hash

Что бы я сделал бы, чтобы сгладить результаты:

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

Ваш массив данных будет конец как одномерный массив выглядит следующим образом:

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

Вы можете использовать строку заменить, чтобы удалить «Тема» с ключами:

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

Затем вы можете использовать Hash :: расширить, чтобы получить исходный массив, теперь отформатированы как вы хотите:

$results = Hash::expand(array_combine($keys, array_values($results))); 
0

Я не думаю, что CakePHP поддерживает это. если вы хотите сделать это с помощью простого способа, установите Set Utility.

http://book.cakephp.org/2.0/en/core-utility-libraries/set.html

+0

Не могли бы вы привести пример? Существует множество применений функций набора. – redrom

+0

'$ foundThemes = Set :: classicExtract ($ tasks, '{n} .Theme');' - это то, что вам нужно; – gmponos

Смежные вопросы