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);
我有一个发票 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);