CakePHP API возвращает результат следующим образом:
{
"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
}
}
]
}
Я хотел бы спросить, как можно удалить вложенные тема объект, чтобы получить такой результат ?:
{
"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',
)
));
Большое спасибо за любые советы.
Вы можете управлять форматами массивов 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,
...
);
Затем вы можете использовать string replace, чтобы удалить «Theme» из ваших ключей:
$keys = array_keys($results);
$keys = str_replace('Theme.', '', $keys);
Затем вы можете использовать Hash :: expand, чтобы получить исходный массив, теперь отформатированный так, как вы хотите:
$results = Hash::expand(array_combine($keys, array_values($results)));
Я не думаю, что CakePHP поддерживает это. если вы хотите сделать это простым способом, проверьте Set Utility.
http://book.cakephp.org/2.0/en/core-utility-libraries/set.html