我有一个发票表和一个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,我最终会得到总数而不是其他数据。
关于如何做地图的任何指针都会减少相关数据的实例,还是有更好的方法?
答案 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);