Laravel 5.4 Query Builder使用groupBy实现orderBy

时间:2017-08-14 08:48:50

标签: php mysql laravel

我想操纵如何使用成本分层方法显示数据,例如 LIFO FIFO

要开始使用,请点击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的数据,并且orderBy使用created_at和{ {1}} 降序,以便将显示的一个数据将是最后添加的数据。 (嗯,这就是我认为会发生的事情)。

但不幸的是,当我使用dsc时,它只显示第一个添加的数据。如何选择最后的数据?我以为groupBy会完成这项工作,但事实并非如此。

1 个答案:

答案 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();

因此,您将获得理想的结果。