2016-06-29 99 views
1

我是laravel的新手。Laravel離開僅加入右表最後一條記錄

我有兩個表。 1)產品 2)價格

----------------------------- 
- products     - 
----------------------------- 
- id_product | int (p_key) - 
- name  | varchar  - 
----------------------------- 

------------------------- 
- prices    - 
----------------------------- 
- id_price | int (p_key) - 
- id_product | int   - 
- price  | int   - 
----------------------------- 

products表保存有關的產品,如idname數據,... 價格的變化都存儲在prices表,其中最後一條記錄,應該是最新價格顯示給用戶。

現在我想通過products進行搜索,並從prices表中獲得每個產品的最後價格。這是我的查詢:

$result = DB::table('products')->leftJoin('prices', function($join) { 
    $join->on('products.id_product', '=', 'prices.id_product'); 
})->whereRaw(MY_SEARCH_FILTERS); 

上面的代碼是錯誤的,因爲如果一個產品有4條記錄prices表,那麼它將在$result重複4次,而應僅顯示1的最後價格記錄。

回答

0

你需要在這裏添加兩個東西,

1)排序依據降序對價格表 2)DB ::表函數第一條(這將只獲取1分的記錄,這將是最新價格)

解決辦法:

$result = DB::table('products') 
->leftJoin('prices',function($join) 
        { 
         $join->on('products.id_product', '=', 'prices.id_product') 
        })->whereRaw(MY_SEARCH_FILTERS) 
->orderBy('prices.id_price','desc') 
->first(); 

您也可以使用(Laravel 5.1):

$result = DB::table('products') 
      ->leftJoin('products.id','=','prices.id_product') 
      ->whereRaw(MY_SEARCH_FILTERS) 
      ->orderBy('prices.id_price','desc') 
      ->first(); 
+0

感謝您的回答,但我認爲我沒有正確解釋問題。 「產品」表中可能有100條記錄。我希望所有人都可以從'prices'表中將他們的最後價格加入並與查詢一起提取。 – Agha

+0

@Agha好的,然後使用group by和 - > get而不是 - > first。這應該完成這項工作。 –