我想知道是否有人可以提供一些關於重構以下函數以減少數據庫查詢數量的建議?另外,使用Laravel可能會有完全不同的方式來實現這一點。重構Laravel函數以減少數據庫查詢的數量
我試圖計算在P & l對於作業,這是由產品,這是由組件組成:
public function jobProfitAndLoss($id)
{
$products_in_job = DB::table('job_product')
->where('job_id', $id)
->get();
$total_price = 0.0000;
$total_cost = 0.0000;
foreach ($products_in_job as $row) {
$total_price = $total_price + ($row->quantity)*($row->price);
$product_id = $row->product_id;
$components_in_product = DB::table('components')
->where('product_id', $product_id)
->get();
foreach ($components_in_product as $component) {
$total_cost = $total_cost + ($component->cost)*($row->quantity);
}
}
return $total_price-$total_cost;
}
產品有成分 -
https://www.dropbox.com/s/ncnij8dnh99sb9v/Screenshot%202016-04-09%2015.22.26.png?dl=0
組件屬於產品 -
https://www.dropbox.com/s/3dx6u30gbod2rv4/Screenshot%202016-04-09%2015.23.43.png?dl=0
個喬布斯有很多產品 -
https://www.dropbox.com/s/q179t0knd7y8z4k/Screenshot%202016-04-09%2015.24.11.png?dl=0
在這裏你會看到有一些相同的查詢被執行多次,這我不知道如何避免這種情況 -
https://www.dropbox.com/s/xonbtx9cdqvq1wd/Screenshot%202016-04-09%2015.33.07.png?dl=0
任何幫助,非常感謝。
我有我的模型所有設置(工作,產品,組件),和他們的關係。 – trh88
好的。在這種情況下,只需切換到Eloquent並在('products');'中使用' - >,然後用'$ row-> products'引用。 – ThePurpleK
@TomHoad作爲參考,它被稱爲「急切加載」。您可以在[documentation here](https://laravel.com/docs/5.2/eloquent-relationships#eager-loading)中閱讀它。 – patricus