php - 如何在 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);
,但是调用.user
user->id
解决方案
了解两个相似调用之间的区别很重要。
whereId()
返回查询构建器的实例,因此您不再调用模型上的方法。所以 update() 是一个查询构建器调用,而不是模型调用。
find()
(或路由模型绑定)将返回模型的实例。因此,您将从模型本身调用 update()。
Eloquent 模型内置了质量分配保护。我的假设是您的一个或多个列不在模型的$fillable数组中。要么将每一列显式添加到$fillable数组中,要么删除$fillable数组并显式添加不应大量分配给$guarded数组的每一列。
推荐阅读
- git - Git refs 合并与拉取请求中的头部
- python - 如何监控子进程对象?
- javascript - Shiny中的条件默认值rhandsontable
- javascript - 如何判断 JS 递归函数的复杂度?
- javascript - Electron:loadURL 中的 httpReferrer 未设置页面的引用者
- laravel - 带有预览的自动完成搜索:我应该预先加载所有产品并且只在前端搜索吗?
- token - Apache Ignite Web 控制台的令牌
- javascript - 误解 React 中 Portal 的一个问题
- java - 如何使用 RestHighLevelClient 获取集群状态或索引元数据?
- reactjs - 如何使用打字稿写日期?