在cakephp 2.x中自定义JSON输出的最简单和最佳实践方法是什么。
我的控制器中有以下内容:
$questions = $this->Question->find('threaded', array(
'fields' => array(
'label',
'id',
'parent_id',
'load_on_demand'
),
'order' => array('lft ASC')
));
$questions= $this->set('questions', $questions);
$this->set('_serialize', 'json');
我有以下JSON(截断);
{
"Question": {
"id": "27",
"parent_id": "0",
"load_on_demand": "true",
"label": "Main Menu"
},
"children": [
{
"Question": {
"id": "28",
"parent_id": "27",
"load_on_demand": "true",
"label": "Web Development"
},
但我需要它像jqTree中的以下示例;
{
label: 'node1',
children: [
{ label: 'child1' },
{ label: 'child2' }
]
},
{
label: 'node2',
children: [
{ label: 'child3' }
]
}
答案 0 :(得分:3)
在设置结果之前,只需使用Hash类:
function buildQuestion(){
$questions = $this->Question->find('all', array(
'fields' => array('label', 'id', 'parent_id','load_on_demand'),
'order' => array('lft ASC')
));
$results = Hash::extract($questions, '{n}.Question');
$results = Hash::nest($results, ['idPath' => '{n}.id', 'parentPath' => '{n}.parent_id');
答案 1 :(得分:0)
首先,您不应将find
用于这些自定义标签或Rest api代码。它只是因为使用任何ORM可能会将额外的数据/对象提取到该api,从而为批量请求消耗大量内存。使用sql如:
Select `Question`.`id` as `id`, .....
from `Question`
INNER JOIN `children` on `children`.`parent_id` = `Question`.`id`
where .......
//I cant say much about the query as the model aint clear to me
如果您想添加额外字段,This可能会有所帮助。记得别名所需的字段。