CakePHP Map/Reduce 还是替代品?

CakePHP Map/Reduce or alternative?

我有一个发票 Table 和一个订单项 Table。当我在索引操作中获得发票列表时,我希望能够 return 发票总额。所以我想 return 将 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']);
}

我应该为这个关联的项目创建一个映射并减少以获得总数,还是有更好的方法可以扩展 select 以包含一个额外的字段。我想出了如何添加 select 但不知道如何将其添加为附加字段。如果我覆盖 LineItems,我只会得到总数而不是其他数据。

关于如何在此实例中对关联数据进行映射缩减的任何指示,或者是否有更好的方法?

我明白了。我需要使用 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);