以下是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
)
)
)我尝试用下面的方法对它进行分组,但是不起作用,因为每个type GroupBy只显示一条记录。
$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']
);
}但是想知道是否可以只使用一个查询?
发布于 2015-02-06 20:12:33
我试着用下面的方法对它进行分组,但不起作用,因为GroupBy每种类型只显示一条记录。
您可能想先学习SQL,因为这是GROUP BY的预期行为,请参见What does group by do exactly ?。
得到的结果数组结构是标准的CakePHP结构,与SQL本身没有任何关系。这只是CakePHP对它们进行格式化的方式。
使用Model::afterFind()回调可以根据需要修改结果。创建一个像transformResult()这样的新方法,并在afterFind()中通过它传递数据。
发布于 2016-09-19 04:08:48
在从数据库获取数据之后,您可以通过操作数据来实现所需的结构。在CakePHP中,您可以使用groupBy方法:
$bankList = $this -> Banking -> find('all', array(
'order' => 'Banking.name asc',
'fields' => array(
'Banking.id',
'Banking.name',
'Banking.type'
)
)) -> groupBy('type');请注意,它与SQL查询无关!这只是一种方便的方式来进行与代码相同的数据重构。
https://stackoverflow.com/questions/28364991
复制相似问题