目前,我有3张桌子:
一个客户可以有上千张发票,一张发票也可以有上千笔付款。
我当前的查询如下:
$invoices = DB::table('invoices')
->where('customer_id', $customer_id)
->get();
foreach ($invoices as $invoice) {
// attach payments result to $invoice->all_payments
$invoice->all_payments = DB::table('payments')
->where('invoice_id', $invoice->id)
->get();
}
我的查询有效,尽管需要很多时间。在性能方面,我正在寻找一种替代方法。
我先前使用联接的查询:
$data = DB::table('invoices')
->join('payments', 'invoices.id', '=', 'payments.invoice_id')
->where('customer_id', $customer_id)
->get();
是否有更好的方法?任何帮助将不胜感激。
答案 0 :(得分:0)
您应该尝试以下操作:
$data = DB::table('invoices')
->join('payments', 'invoices.id', '=', 'payments.invoice_id')
->leftJoin('customers', 'invoices.customer_id', '=', 'customers.id')
->where('customer_id', $customer_id)
->get();
答案 1 :(得分:0)
如何善于口才?
Invoice::with('payments')->where('customer_id', $customerId)->get();
您只需要在Invoice模型中添加关系方法,如下所示:
public function payments()
{
return $this->hasMany('App\Model\Payment');
}