我对laravel中的可排序菜单有疑问。如果我加载我的页面,它会给我一个致命错误,上面写着" Class' Input'在web.php第49行和第34行中找不到。
这是第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', 'HomeController@index')->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 :(得分:0)
use Illuminate\Support\Facades\Input;
或添加
&#39;输入&#39; =&GT;照亮\支持\外墙\输入::类,
在config / app.php别名中
和
将use Input
;放在web.php中
答案 1 :(得分:0)
如果您想从路线文件use $request
:
use Illuminate\Http\Request;
Route::get('/custom',function(Request $request) {
$itemID = $request->itemID;
// ...
<强>更新强>
此代码中还有另一个问题:
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
进行更新,实际上没有更新任何记录。< / p>
要更新所有记录,请尝试从循环中删除返回,以便完成:
foreach($menu as $value){
DB::table('orders')->where('menu_id','=',$itemID)->update(array('order'=> $itemIndex));
}});
return;