Laravel更新用户数据时出现getKeyName()调用字符串错误求助
错误原因
你碰到的Call to a member function getKeyName() on string错误,根源是控制器里误用了Laravel的模型方法:Customer::updated()是用来触发模型更新完成后事件的静态方法,它要求传入一个Customer模型实例作为参数,但你传的是验证后的请求数组$request->validated(),类型不匹配导致内部调用模型方法时出错。
修复方案
要正确更新用户数据,需先获取目标用户的模型实例,再执行更新操作:
修改控制器更新方法
借助Laravel的路由模型绑定,直接在方法中注入Customer实例(前提是更新路由携带用户ID参数):public function update(CustomerRequest $request, Customer $customer) { $customer->update($request->validated()); return redirect()->route('customers.index')->with('updateMessage', 'Customer data successfully updated'); }确认路由配置正确
你的更新路由需要包含用户ID参数,示例如下:Route::put('/customers/{customer}', [CustomerController::class, 'update'])->name('customers.update');可选优化
模型中的getRouteKeyName()方法可以删除,因为Laravel默认就使用id作为路由键,无需额外定义。
内容的提问来源于stack exchange,提问作者perh23
相关产品推荐
相关产品推荐

