如何按实体创建虚拟求和字段

时间:2016-10-14 22:34:53

标签: mysql cakephp cakephp-3.x

我有平方里程字段的记录。我想按日期对这些字段求和,因此无论显示页面,顺序等如何,按实体的值都是相同的。 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我不知道如何将其添加到代码中。

1 个答案:

答案 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;
    }