2017-08-14 103 views
1

我想操縱如何使用成本分層方法顯示數據,如LIFOFIFOLaravel 5.4查詢生成器使用groupBy執行orderBy

爲了讓事情開始,這裏是我的query

$items = Inventory::whereActive('1') 
     ->where('quantity', '>', 0) 
     ->where(function($query) use($request) { 
      $query->where('name', 'LIKE', '%'.$request->search.'%') 
      ->orwhere('ref_code', 'LIKE', '%'.$request->search.'%'); 
     })->orderBy('created_at', 'dsc') 
     ->groupBy('ref_code') 
     ->get(); 

我想用groupByref_code所以它只會顯示具有相同ref_code一個數據,我用orderBycreated_atdsc下降,以便顯示的一個數據將是最後添加的數據。 (好吧,那就是我認爲會發生的事情)。

但不幸的是,當我使用groupBy時,它只顯示第一個添加的數據。我怎樣才能選擇最後的數據?我以爲orderBy是要做的工作,但它沒有。

+1

它是'desc'的順序,而不是dsc – Jorn

+0

DESC和DSC將以相同的方式工作。 –

+0

爲什麼你不使用latest()呢? –

回答

1

您可以使用另一種方法。如果您有自動遞增的主鍵id那麼你可以不喜歡它,

$ids = Inventory::whereActive('1') 
     ->where('quantity', '>', 0) 
     ->where(function($query) use($request) { 
      $query->where('name', 'LIKE', '%'.$request->search.'%') 
      ->orwhere('ref_code', 'LIKE', '%'.$request->search.'%'); 
     }) 
     ->select('ref_code',\DB::raw('MAX(id) as ID')) 
     ->groupBy('ref_code') 
     ->pluck('ID'); 

現在,獲取項爲

$items = Inventory::whereIn('id',$ids)->get(); 

因此你會得到你想要的結果。

+0

我完全有這個想法,但從來不知道我應該使用'pluck'!哈哈,謝謝你。它工作完美。我使用'first'代替,並沒有返回任何行。 –