CakePHP 查询生成器和计数语法
CakePHP Querybuilder & Count Syntax
最近我遇到了一个看似简单的任务,即在查询构建器语句中输出引用项的相关计数。
这里是简化代码:
$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?
在查询生成器中使用计数函数真的是理想的方法吗?
还有比这更好的解决办法吗?
让我们看看你在这里做什么:
- 您获得 table 定位器(需要步骤)
- 你得到了table(需要的步骤)
- 您需要加载数据(需要的步骤)
- 你需要调用一个函数(需要步骤)
- 你调用那个计数函数(需要步骤)
您可以通过先初始化查询来消除一些冗余:
$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('*')
])
最近我遇到了一个看似简单的任务,即在查询构建器语句中输出引用项的相关计数。
这里是简化代码:
$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?
在查询生成器中使用计数函数真的是理想的方法吗?
还有比这更好的解决办法吗?
让我们看看你在这里做什么:
- 您获得 table 定位器(需要步骤)
- 你得到了table(需要的步骤)
- 您需要加载数据(需要的步骤)
- 你需要调用一个函数(需要步骤)
- 你调用那个计数函数(需要步骤)
您可以通过先初始化查询来消除一些冗余:
$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('*')
])