2017-08-14 89 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'代替,并没有返回任何行。 –