如何使用Laravel 5.6中的Route Model Binding更新用户

时间:2018-06-10 22:07:38

标签: php laravel-5

我有个人资料视图,我想更新用户个人资料。

我的控制器:

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)获得当前用户实例时。 enter image description here 现在我想用validatedData更新用户。但遗憾的是,这$user->update($validatedData);无效。我不明白为什么...... 这个User::whereId($user->id)->update($validatedData);正在运行,但要user user->id,请感觉很奇怪。

2 个答案:

答案 0 :(得分:1)

了解两个类似调用之间的区别非常重要。

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

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

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

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

答案 1 :(得分:0)

如果您尝试更新 remenber 将字段声明为模型上的 $fillable 属性。

protected $fillable = ['name','email','key'];

之后,您可以使用路由模型绑定更新模型