CakePHP Map / Reduce还是替代?

时间:2015-11-15 19:49:06

标签: cakephp cakephp-3.1

我有一个发票表和一个LineItems表。当我获得索引操作的发票清单时,我希望能够返回发票总额。所以我想将Invoice,LineItems和LineItems.price字段的总和作为Total返回。

控制器中的当前索引代码是默认生成的。

public function index()
{
    $this->paginate = [
        'contain' => ['Clients', 'Users', 'LineItems']
    ];
    $this->set('invoices', $this->paginate($this->Invoices));
    $this->set('_serialize', ['invoices']);
}

我应该创建一个地图并减少此关联项目以获得总数,还是有更好的方法可能会扩展选择以包含其他字段。我想出了如何添加选择但不是如何添加它作为附加字段。如果我覆盖LineItems,我最终会得到总数而不是其他数据。

关于如何做地图的任何指针都会减少相关数据的实例,还是有更好的方法?

1 个答案:

答案 0 :(得分:0)

我明白了。我需要使用leftJoinWith和autoFields来获得所需的结果。这给我留下了LineItems和发票总额!

    $invoice = $this->Invoices->find('all', ['contain' =>
        ['Clients', 'Users', 'Payments', 'Payments.PaymentTypes', 'LineItems']]);

    $invoice->select(['total' => $invoice->func()->sum('LineItems.price')])
        ->leftJoinWith('LineItems')
        ->autoFields(true);