为了账号安全,请及时绑定邮箱和手机立即绑定

CakePHP Querybuilder 和计数语法

CakePHP Querybuilder 和计数语法

PHP
红颜莎娜 2022-10-28 14:53:05
最近,我遇到了看似简单的任务,即在查询构建器语句中输出引用项目的相关计数。这里的简化代码:$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?在查询构建器中使用计数函数真的是理想的方法吗?还有比这更好的解决方案吗?
查看完整描述

2 回答

?
开心每一天1111

TA贡献1836条经验 获得超13个赞

您可以通过首先初始化查询来消除一些冗余:


$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('*')

])


查看完整回答
反对 回复 2022-10-28
?
慕桂英4014372

TA贡献1871条经验 获得超13个赞

让我们看看你在这里做什么:

  • 你得到了表格定位器(需要的步骤)

  • 你得到了桌子(需要的步骤)

  • 您需要加载数据(需要步骤)

  • 你需要调用一个函数(需要的步骤)

  • 您调用该计数功能(需要步骤)


查看完整回答
反对 回复 2022-10-28
  • 2 回答
  • 0 关注
  • 89 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信