我有平方里程字段的记录。我想按日期对这些字段求和,因此无论显示页面,顺序等如何,按实体的值都是相同的。 e.g:
|id| date |sqmiles|total| |--|----------|-------|-----| |1 |2010-10-10| 2 | 2 | |2 |2011-11-11| 3 | 5 | |3 |2012-12-12| 1 | 6 |
|id| date |sqmiles|total| |--|----------|-------|-----| |3 |2012-12-12| 1 | 6 | |1 |2010-10-10| 2 | 2 | |2 |2011-11-11| 3 | 5 |
我的开始想法是一个虚拟字段,它请求以下SQL:
SELECT SUM(sq_miles) FROM table WHERE date <= ($this->_properties['date']);
但是使用CakePHP3的新ORM我不知道如何将其添加到代码中。
答案 0 :(得分:0)
这可能不是最好的&#34;回答,但我做到了:
在实体中添加use Cake\ORM\TableRegistry;
,然后使用以下函数:
protected function _getTotalSqMiles()
{
$annexations = TableRegistry::get('Annexations');
$query = $annexations->find();
$sum = $query->func()->sum('sq_miles');
$results = $query->select(['total' => $sum])
->where([
'effective_date <=' => $this->_properties['effective_date']
])
->first();
return $results->total;
}