提问者:小点点

尝试在Laravel 5.4上编辑用户时出错


我正在用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”。

有人有这个问题吗?


共3个答案

匿名用户

更换控制器

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的列。