首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >以结构化格式显示所有行的CakePHP GroupBy

以结构化格式显示所有行的CakePHP GroupBy
EN

Stack Overflow用户
提问于 2015-02-06 19:40:25
回答 2查看 285关注 0票数 1

以下是Banking MySQL表结构:

代码语言:javascript
复制
id | name | type
1  | abc  | xyz
2  | jkl  | xyz
3  | efg  | pql  

现在,记录以以下格式显示:

代码语言:javascript
复制
    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字段,并显示所有记录。以下是所需的结构:

代码语言:javascript
复制
    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只显示一条记录。

代码语言:javascript
复制
$bankList = $this -> Banking -> find('all', array(
            'order' => 'Banking.name asc',
            'fields' => array(
                'Banking.id',
                'Banking.name',
                'Banking.type'
            ),
            'group' => array('Banking.type')
        ));

虽然我实现了自定义$bankList的结果

代码语言:javascript
复制
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']
            );
        }

但是想知道是否可以只使用一个查询?

EN

回答 2

Stack Overflow用户

发布于 2015-02-06 20:12:33

我试着用下面的方法对它进行分组,但不起作用,因为GroupBy每种类型只显示一条记录。

您可能想先学习SQL,因为这是GROUP BY的预期行为,请参见What does group by do exactly ?

得到的结果数组结构是标准的CakePHP结构,与SQL本身没有任何关系。这只是CakePHP对它们进行格式化的方式。

使用Model::afterFind()回调可以根据需要修改结果。创建一个像transformResult()这样的新方法,并在afterFind()中通过它传递数据。

票数 0
EN

Stack Overflow用户

发布于 2016-09-19 04:08:48

在从数据库获取数据之后,您可以通过操作数据来实现所需的结构。在CakePHP中,您可以使用groupBy方法:

代码语言:javascript
复制
$bankList = $this -> Banking -> find('all', array(
        'order' => 'Banking.name asc',
        'fields' => array(
            'Banking.id',
            'Banking.name',
            'Banking.type'
        )
    )) -> groupBy('type');

请注意,它与SQL查询无关!这只是一种方便的方式来进行与代码相同的数据重构。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28364991

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档