在查询中的Laravel动态排序

时间:2017-10-03 20:15:41

标签: php mysql laravel laravel-5

我有一个包含10个不同字段的表格。我希望能够单击表格的列,然后页面将按照所选列中的顺序重新加载。

我已将此添加到我的路线中:

Route::get('/inventory/sort/{sortby}', ['uses' => 'ItemController@index']); 

我的控制器:

 public function index($sortby = null) {
    $Inventory_Items = ItemDynamic::with(['Item'])
                     ->orderBy(function ($query) use($sortby) {
                         if ($sortby == "quantity") {
                           $query->orderBy('Quantity','asc');
                         } else if ($sortby == 'name') {
                           $query->orderBy('name','asc');
                         } else {
                           $query->orderBy('id','asc');
                         }
                       })
                     ->paginate(20);
        return view('adminlte::Item.index', ['Inventory_Items' => $Inventory_Items]);
    }

因此,当我访问/inventory/sort/quantity时,它应该按数量生成订单。

相反,我收到strtolower()错误。

关于如何实现这一目标的任何想法?

1 个答案:

答案 0 :(得分:1)

看起来这里有一点递归。在orderBy中运行查询。

我会将条件返回到orderBy方法。

 if($sortBy == 'desired condition') 
    { $sortBy = 'desired condition'; $dir == "asc/..."; } 
 ...orderBy($sortBy, $dir)...