$query = $Details->find();
$query->select(['sum' => $query->func()->sum('total')]);
一次调用即可完成所有操作,而无需声明我不会在其他任何地方使用的变量。
$results = $Details->find('all', [
'fields' => [
'sum' => new Cake\ORM\Query()->func()->sum('total'),
],
]);
$results = $Details->find('all', [
'fields' => [
'sum' => $Details->func()->sum('total'),
],
]);
显然那没有用,但是你明白了。
之所以提出这一点,是因为我看到某人确实在这样做:在共享的,已经可用的对象上调用func()
。我相信这是表对象,但是一旦尝试了它,它就无法工作。
你们认为这是可能的,还是我错过了什么?
答案 0 :(得分:1)
您不能在表对象上调用func()
,没有这样的方法,您必须获取一个查询对象,即$Table->query()->func()
,虽然可以正常工作,但这不一定是最好的主意,因为它将是一个新的查询对象,不会考虑为您的find()
调用创建的查询对象上发生的可能修改。
tl; dr,使用可调用对象,它将接收当前查询对象作为其第一个参数:
$query = $Details
->find()
->select(function (\Cake\ORM\Query $query) {
return [
'sum' => $query->func()->sum('total')
];
});
另请参见