2017-09-23 128 views
0

我有一個關於laravel中可排序菜單的問題。如果我加載我的網頁,它給了我一個致命的錯誤,說「Class'Input'沒有在web.php第49行」中找到。與laravel排序的jquery不起作用

這是第49行的內容:「$ itemID = Input :: get('itemID');」。下面你看到整個代碼塊

Route::get('/custom',function(){ 
    $menu = DB::table('orders')->orderBy('order','ASC')->get(); 
    $itemID = Input::get('itemID'); 
    $itemIndex = Input::get('itemIndex'); 

    foreach($menu as $value){ 
     return DB::table('orders')->where('menu_id','=',$itemID)->update(array('order'=> $itemIndex)); 
    }}); 

這是我的jquery:

$('document').ready(function(){ 
    $(function(){ 
     $("#menu").sortable({ 
     stop: function(){ 
      $.map($(this).find('li'), function(el) { 
      var itemID = el.id; 
      var itemIndex = $(el).index(); 
      $.ajax({ 
       url:'{{URL::to("custom")}}', 
       type:'GET', 
       dataType:'json', 
       data: {itemID:itemID, itemIndex: itemIndex}, 
      }) 
      }); 
     } 
     }); 
    }); 

    console.log(itemID); 

}); 

這是我的路線文件:

<?php 

/* 
|-------------------------------------------------------------------------- 
| Web Routes 
|-------------------------------------------------------------------------- 
| 
| Here is where you can register web routes for your application. These 
| routes are loaded by the RouteServiceProvider within a group which 
| contains the "web" middleware group. Now create something great! 
| 
*/ 



Route::get('/', function() { 
    return view('home'); 
}); 

Auth::routes(); 

Route::get('/home', '[email protected]')->name('home'); 

Route::get('/custom', function(){ 
    return view('custom'); 
}); 

Route::get('/custom-menu', function(){ 
    return view('custom'); 
}); 


// function to view menu which are in order 
Route::get('/', function() { 
    $menu = DB::table('orders')->orderBy('order','ASC')->get(); 
    return view('custom-menu',['menus'=>$menu]); 
}); 


// To view Menu That are in database 
Route::get('custom',function(){ 
    $menu = DB::table('orders')->orderBy('order','ASC')->get(); 
    return view('custom',['menus'=>$menu]); 
}); 

// Function to order menus 
Route::get('/custom',function(){ 
     $menu = DB::table('orders')->orderBy('order','ASC')->get(); 
     $itemID = Input::get('itemID'); 
     $itemIndex = Input::get('itemIndex'); 

     foreach($menu as $value){ 
      return DB::table('orders')->where('menu_id','=',$itemID)->update(array('order'=> $itemIndex)); 
     } 
}); 

是否有人知道我可以解決這個錯誤?

+0

嘗試使用輸入;在web.php – RamAnji

回答

0
use Illuminate\Support\Facades\Input; 

或添加

'輸入'=>照亮\支持\外牆\輸入::類,

在配置

/app.php別名 和 地方use Input;在web.php

+0

如果我這樣說它說:「使用聲明與非複合名稱'輸入'沒有任何影響」 –

+0

如果我把「使用Illuminate \ Support \ Facades \ Input;」在我的web.php文件中,它會在我的頁面上加載一個零 –

+0

嘗試使用Illuminate \ Support \ Facades \ Input :: get('itemIndex'); – RamAnji

0

如果你想從你的路由文件訪問請求,use $request

use Illuminate\Http\Request; 

Route::get('/custom',function(Request $request) { 
    $itemID = $request->itemID; 
    // ... 

UPDATE

有這碼另一個問題:

foreach($menu as $value){ 
    return DB::table('orders')->where('menu_id','=',$itemID)->update(array('order'=> $itemIndex)); 
}}); 

這將開始遍歷每個$menu你在第一個查詢($menu = DB::table ...)找到,但它return年代後第一一。這意味着它永遠不會更新所有項目,只有第一個項目。

在你的評論中,你說it returns 0。從the Laravel docs

更新方法應該用於更新數據庫中的現有記錄。受該語句影響的行數將返回

所以,如果你正在尋找發送到您的AJAX調用的響應,並且看到0,這意味着第一$menu進行更新,沒有記錄實際上已更新。

要更新所有的記錄,嘗試只去除循環返回,所以它完成:

foreach($menu as $value){ 
    DB::table('orders')->where('menu_id','=',$itemID)->update(array('order'=> $itemIndex)); 
}}); 

return; 
+0

它不斷返回一個零 –

+0

@CorneliusVanErkelens什麼返回0?我在我的答案中測試了代碼,它工作正常。 –

+0

@CorneliusVanErkelens我找到了你可能的意思,並更新了我的答案。 –