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']
);
}
但想知道仅使用查询是否可行?
最佳答案
I tried Grouping it the following way but didn't work since GroupBy shows only one record per type.
您可能想先学习 SQL,因为这是 GROUP BY
的预期行为,请参阅 What does group by do exactly ?
您得到的结果数组结构是标准的 CakePHP 结构,与 SQL 本身没有任何关系。这正是 CakePHP 格式化它们的方式。
使用 Model::afterFind()回调以根据需要修改结果。创建一个新方法,如 transformResult()
,并在 afterFind() 中通过它传递数据。
关于php - CakePHP GroupBy 以结构化格式显示所有行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28364991/