3
我在我的Matches
表中有一個自定義查找方法,其中包含一些其他表,並且我想返回其中一個包含字段的總和值。如何從一個包含的表中返回一個sum()?
到目前爲止,我有以下幾點。
/**
* Custom finder to find the latest matches played
*
* @param Query $query
* @param array $options
* @return $this
*/
public function findLatestMatches(Query $query, array $options) {
return $query->contain([
'Venues' => function ($q) {
return $q->select(['id', 'name', 'location']);
},
'Formats' => function ($q) {
return $q->select(['id', 'name']);
},
'Teams' => [
'Clubs' => function ($q) {
return $q->select(['id', 'image', 'image_dir']);
}
],
'Innings' => [
'InningsTypes',
'Batsmen' => function ($q) {
/* @var \Cake\ORM\Query $q */
return $q->select(['totalRuns' => $q->func()->sum('runs')]);
},
'Bowlers',
'Wickets' => function ($q) {
/* @var \Cake\ORM\Query $q */
return $q->select(['totalWickets' => $q->func()->count('id')]);
}
]
])
->order(['when_played' => 'DESC']);
}
此代碼將正常執行並且不會產生錯誤。同時檢查DebugKit中的SQL選項卡顯示sql已被執行。
SELECT (SUM(runs)) AS `totalRuns` FROM batsmen Batsmen WHERE Batsmen.innings_id in ('841fce60-0178-450f-99e8-ad1670f5c84f','93daddf5-256b-4420-b636-0db626baae72','b398d1a0-2c7d-41f7-b2c3-8ea00ddfcece','f949bb45-3d8b-46f5-8967-cc1340a9c1e7')
但是,數據在任何返回的實體中都不可用。我在哪裏可以找到我的彙總數據?
現在無法對其進行測試,因此我將其留作評論,嘗試將外鍵添加到選擇字段列表。除此之外,我認爲你必須重新格式化數據以防止這種情況發生,也許你應該考慮使用[** counter caches **](http://book.cakephp.org/3.0/en/ orm/behaviors/counter-cache.html)。 – ndm 2014-12-02 01:07:23
我目前只是返回整個數據並使用收集方法進行聚合,但我寧願在數據庫中執行。 – 2014-12-02 08:41:00