2017-08-14 11 views
1

LIFOFIFOのようなコスト階層化方法でデータを表示する方法を操作したかったのですが、Laravel 5.4 Query Builder 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(); 

私はそれだけで同じref_codeと1件のデータが表示されますref_codegroupByを使用していた、と私は降順ためcreated_atorderBydscを使用が表示され、表示される1つのデータが最後に追加されます。 (まあ、それは私が起こると思います)。

残念ながら、groupByを使用した場合、最初に追加されたデータのみが表示されます。最後のデータはどのように選択できますか?私はorderByが仕事をするつもりだと思ったが、それはしなかった。

+1

これは「desc」による注文ですが、dscではありません – Jorn

+0

DESCとDSCは同じように動作します。 –

+0

なぜ最新の()を使用しないのですか? –

答えて

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'を使用していましたが、何の行も返しませんでした。 –

関連する問題