2017-10-03 6 views
0

私は10種類のフィールドを持つテーブルを持っています。私はテーブルの列をクリックすることができるようにしたい、そして、ページは選択された列の順序で再読み込みされます。Laravel Dynamic Order By inクエリ

私は私のルートにこれを追加しました:

Route::get('/inventory/sort/{sortby}', ['uses' => '[email protected]']); 

マイコントローラー:

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

ここに再帰のビットがあるように見えます。 orderByの内部でクエリを実行する。

私は条件式をorderByメソッドに返します。

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