You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel更新用户数据时出现getKeyName()调用字符串错误求助

错误原因

你碰到的Call to a member function getKeyName() on string错误,根源是控制器里误用了Laravel的模型方法:
Customer::updated()是用来触发模型更新完成后事件的静态方法,它要求传入一个Customer模型实例作为参数,但你传的是验证后的请求数组$request->validated(),类型不匹配导致内部调用模型方法时出错。

修复方案

要正确更新用户数据,需先获取目标用户的模型实例,再执行更新操作:

  1. 修改控制器更新方法
    借助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');
    }
    
  2. 确认路由配置正确
    你的更新路由需要包含用户ID参数,示例如下:

    Route::put('/customers/{customer}', [CustomerController::class, 'update'])->name('customers.update');
    
  3. 可选优化
    模型中的getRouteKeyName()方法可以删除,因为Laravel默认就使用id作为路由键,无需额外定义。

内容的提问来源于stack exchange,提问作者perh23

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 01:20:46