我正在用laravel开始一个项目,当我试图编辑一个用户时遇到了一个问题。
它总是返回“查询异常”,就好像我没有传递用户标识,但是我使用了我的模型的默认布局,所以我的网址类似于 /users/1/edit.
我的路线是这样定义的:
Route::get('/', function(){
return view('welcome');
});
Route::resource('users', 'CtrUsers');
这是我获取编辑URL的方式:
href="{{route('users.edit', $user)}}"
($user设置在foreach循环中)
这是我的编辑功能:
public function edit(User $user)
{
return view('users.edit', compact('user'));
}
奇怪的是,当我输入URL/users/edit/1(最后是de ID)时,它停止返回QueryException,但返回“NotFoundHttpException”。
有人有这个问题吗?
更换控制器
public function edit($id)
{
$user = User::findOrFail($id);
return view('users.edit', compact('user'));
}
重新编辑
public function edit($id)
{
$user = User::where('usr_id',$id)->findOrFail();
return view('users.edit', compact('user'));
}
问题在于用于路由模型绑定的变量名。两个变量名:路由上的变量名和动作参数中的变量名必须匹配。
您可以使用php artisan route:list
命令检查路由信息。
因此,您有两个选项,将路径中的users
变量名更改为user
,如下所示:
Route::resource('user', 'CtrUsers');
或
您可以在action参数中将变量名从user
更改为user
,例如:
public function edit(User $users)
{
return view('users.edit', compact('user'));
}
更多信息:
https://laravel.com/docs/master/routing#route-模型绑定
我找到的最佳解决方案是重建迁移,将表ID的名称改为“ID”,因为我注意到错误总是存在的,因为系统找不到任何名为usr_ID的列。