以下是Banking
MySQL表结构:
id | name | type
1 | abc | xyz
2 | jkl | xyz
3 | efg | pql
现在,记录以下列格式显示:
Array
(
[0] => Array
(
[Banking] => Array
(
[id] => 1
[name] => abc
[type] => xyz
)
)
[1] => Array
(
[Banking] => Array
(
[id] => 2
[name] => jkl
[type] => xyz
)
)
[2] => Array
(
[Banking] => Array
(
[id] => 3
[name] => efg
[type] => pql
)
)
)
我需要根据type
字段显示GroupBy字段并显示所有记录。以下是理想的结构:
Array
(
[xyz] => Array
(
[0] => Array
(
[id] => 1
[name] => abc
)
[1] => Array
(
[id] => 2
[name] => jkl
)
)
[pql] => Array
(
[0] => Array
(
[id] => 2
[name] => efg
[type] => xyz
)
)
)
我尝试按以下方式对其进行分组,但由于GroupBy每type
只显示一条记录,因此无效。
$bankList = $this -> Banking -> find('all', array(
'order' => 'Banking.name asc',
'fields' => array(
'Banking.id',
'Banking.name',
'Banking.type'
),
'group' => array('Banking.type')
));
虽然我实现了自定义$bankList
的结果:
foreach ($bankList as $b) {
if (!in_array($b['Banking']['type'], $type)) {
$type[] = $b['Banking']['type'];
}
$bList[$b['Banking']['type']][] = array(
'name' => $b['Banking']['name'],
'id' => $b['Banking']['id']
);
}
但是想知道它是否可以仅使用查询?
答案 0 :(得分:0)
我尝试按以下方式对其进行分组,但自GroupBy以来无效 每种类型只显示一条记录。
您可能希望首先学习SQL,因为这是GROUP BY
的预期行为,请参阅What does group by do exactly ?
您得到的结果数组结构是标准的CakePHP结构,并且 根本没有与SQL本身有关。这就是CakePHP如何格式化它们。
使用Model::afterFind()回调根据需要修改结果。创建一个新方法,如transformResult()
,并在afterFind()中传递数据。
答案 1 :(得分:0)
通过在从数据库中获取数据后操作数据,可以实现所需的结构。在CakePHP中,您可以使用groupBy方法:
$bankList = $this -> Banking -> find('all', array(
'order' => 'Banking.name asc',
'fields' => array(
'Banking.id',
'Banking.name',
'Banking.type'
)
)) -> groupBy('type');
请注意,它与SQL查询无关!这是与代码进行相同数据重组的便捷方式。