一种无需声明 `$query` 即可调用 `->func()->sum()` 的方法
A way to call `->func()->sum()` without having to declare `$query`
我有什么
$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()
。我认为它是 table 对象,但我试过后发现它不起作用。
你们认为这是可能的,还是我遗漏了什么?
你不能在 table 对象上调用 func()
,没有这样的方法,你必须获得一个查询对象,即 $Table->query()->func()
,虽然这会起作用这不一定是最好的主意,因为它将是一个新的查询对象,不会考虑为您的 find()
调用创建的查询对象可能发生的修改。
tl;dr,使用可调用函数,它将接收当前查询对象作为其第一个参数:
$query = $Details
->find()
->select(function (\Cake\ORM\Query $query) {
return [
'sum' => $query->func()->sum('total')
];
});
另见
我有什么
$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()
。我认为它是 table 对象,但我试过后发现它不起作用。
你们认为这是可能的,还是我遗漏了什么?
你不能在 table 对象上调用 func()
,没有这样的方法,你必须获得一个查询对象,即 $Table->query()->func()
,虽然这会起作用这不一定是最好的主意,因为它将是一个新的查询对象,不会考虑为您的 find()
调用创建的查询对象可能发生的修改。
tl;dr,使用可调用函数,它将接收当前查询对象作为其第一个参数:
$query = $Details
->find()
->select(function (\Cake\ORM\Query $query) {
return [
'sum' => $query->func()->sum('total')
];
});
另见