如何使用cakephp 3.2 inbuilt sum功能在关联表中的sum操作(求和字段)不在父表中?

时间:2016-10-04 06:51:33

标签: php cakephp cakephp-3.x cakephp-3.2

我想在cakephp 3.2中总结一个字段。 但该领域存在于hasOne模型协会中。

我想在绑定查询中执行此操作。

我有一个订单表,我正在使用集合表进行模型绑定。

这里我想总结一下集合表中的所有due_amount

我已经尝试过但它不起作用。

请检查我的代码,它有什么问题。?

 $this->Orders->hasOne('Collections', [
                'className' => 'Collections',
                'foreignKey' => 'order_id',
                'strategy' => 'select',
                'conditions' => function (\Cake\Database\Expression\QueryExpression $exp, \Cake\ORM\Query $query) {
                    $query->order(['Collections.id' => 'ASC']);
                    return [];
                }
                    ]);
            $get_total_sales = $this->Orders->find('all')->where($condition)->select(['id', 'region_id', 'net_total'])->contain(['Collections' => ['queryBuilder' => function ($q) {
                                return $q->select(['id', 'order_id', 'total_sale_amount', 'due_amount']);
                            }]])->order(['Orders.due_date DESC']);


$res2 = $get_total_sales->select(['total_due' =>$get_total_sales->func()->sum('collection.due_amount')])->first(); 

 echo  $due = $res2->total_due;//its showing column not find error.
Is it working in order table instead of collections table?
How can i do it for collection table using the $get_total_sales listing results?



Below some out put 

[
    {
        "id": 40,
        "region_id": 2,
        "net_total": 2899.12,
        "collection": {
            "id": 182,
            "order_id": 40,
            "total_sale_amount": 2899.12,
            "due_amount": 1990
        },

    },
    {
        "id": 38,
        "region_id": 2,
        "net_total": 110,
        "collection": {
            "id": 181,
            "order_id": 38,
            "total_sale_amount": 110,
            "due_amount": 10
        },

    },
    {
        "id": 39,
        "region_id": 2,
        "net_total": 16670,
        "collection": {
            "id": 190,
            "order_id": 39,
            "total_sale_amount": 16670,
            "due_amount": 16630.99
        },

    },

这里我想总结一下集合表中的所有due_amount

谢谢

1 个答案:

答案 0 :(得分:1)

您可以使用子表的虚拟字段,在您的情况下是Collections表。

您可以查看文档以在cakephp3 here

中创建虚拟字段

在虚拟字段中,您可以指定sum函数。要编写sum函数,可以参考here