php - CakePHP GroupBy 以结构化格式显示所有行

标签 php mysql cakephp

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/

相关文章:

php - 如何获取mysql中每组的最低值

mysql - CakePHP counterCache 加入不相关的表来更新计数器

model-view-controller - Cakephp:将 AppController 抽象到另一个层次,可能吗?

php - 通过 paypal 重定向时无法传递 POST 数据

php - 执行多个查询,然后查找返回值之间的匹配项

php - 使用 mysql 和 php 的 Viewcount

php - Python 和 PHP 使用相同的 mySQL 数据库

php - 我不断在 hMailServer 和 XAMPP 的 PHPWebAdmin 页面中获取 "Fatal Error: Class COM not found"

php - 对 json_encoded 数据执行 sql 查询,例如过滤器

php - 序列调用cake php 2行为回调函数