猿问

CakePHP Querybuilder 和计数语法

最近,我遇到了看似简单的任务,即在查询构建器语句中输出引用项目的相关计数。


这里的简化代码:


$data = TableRegistry::getTableLocator()->get('tableA')->find()

        ->select(

            [

                'tableA.term',

                'tableA.termkey',


                 'count(tableA.termkey)' //my first though was this...but it does not work

                 'count' => TableRegistry::getTableLocator()->get('tableA')->find()->func()->count('*') //ok

            ],


        )         

        ->join([

            ....

            ]

        ])

        ->where(

            ....

        )->group(

            ....

        )->order(

           ....     

        );

现在,经过一些文档查找后,我终于找到了一个语法相当奇特的解决方案。


TableRegistry::getTableLocator()->get('tableA')->find()->func()->count('*') //ok, works so far..but do I need this all stuff for an simple count?

在查询构建器中使用计数函数真的是理想的方法吗?


还有比这更好的解决方案吗?


红颜莎娜
浏览 90回答 2
2回答

开心每一天1111

您可以通过首先初始化查询来消除一些冗余:$query = TableRegistry::getTableLocator()->get('tableA')->find();$query = $query->select([    'tableA.term',    'tableA.termkey',    // $query is already a query object here, so you can call func on it directly    'count' => $query->func()->count('*')])

慕桂英4014372

让我们看看你在这里做什么:你得到了表格定位器(需要的步骤)你得到了桌子(需要的步骤)您需要加载数据(需要步骤)你需要调用一个函数(需要的步骤)您调用该计数功能(需要步骤)
随时随地看视频慕课网APP
我要回答