首页 > 解决方案 > 如何在 Laravel 5.6 中使用路由模型绑定更新用户

问题描述

我有一个个人资料视图,我想在其中更新用户个人资料。

我的控制器:

public function update(Request $request, User $user)
    {

        $validatedData = $request->validate([

            'name' => 'required',
            'email' =>'required|email',
            'key' => 'required'

        ]);

        // dd($user);

        $user->update($validatedData);

        // User::whereId($user->id)->update($validatedData);

        return back()->with('flash', 'Successfully updated profile.');

    }

我将模型的实例注入到我的路线中。当我dd($user)得到当前的用户实例时。 在此处输入图像描述 现在我想用验证数据更新用户。但不幸$user->update($validatedData);的是,这不起作用。我不明白为什么...这是有效的User::whereId($user->id)->update($validatedData);,但是调用.useruser->id

标签: phplaravel-5

解决方案


了解两个相似调用之间的区别很重要。

whereId()返回查询构建器的实例,因此您不再调用模型上的方法。所以 update() 是一个查询构建器调用,而不是模型调用。

find()(或路由模型绑定)将返回模型的实例。因此,您将从模型本身调用 update()。

Eloquent 模型内置了质量分配保护。我的假设是您的一个或多个列不在模型的$fillable数组中。要么将每一列显式添加到$fillable数组中,要么删除$fillable数组并显式添加不应大量分配给$guarded数组的每一列。

https://laravel.com/docs/5.6/eloquent#mass-assignment


推荐阅读