0

我有一个发票表和一个 LineItems 表。当我获得索引操作的发票列表时,我希望能够返回发票总额。因此,我想将 Invoice、LineItems 和 LineItems.price 字段的总计作为总计返回。

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

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

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

在这种情况下,有关如何对关联数据进行映射减少的任何指针,还是有更好的方法?

4

1 回答 1

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);
于 2015-11-15T22:36:07.253 回答