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

非静态方法‘update’不应被静态调用,如何解决该Laravel错误?

报错原因及修复方案

报错原因

  1. 错误调用update方法:Laravel Eloquent模型的update()是实例方法,必须通过已获取的模型对象(比如find/findOrFail拿到的实例)调用,不能用Grade::update()这种静态方式调用,这就是"non static method 'update' should not be called statically"错误的核心原因。
  2. 变量覆盖逻辑错误:你先通过Grade::find($id)获取了模型实例,但紧接着用$grade = $request->validate(...)把实例覆盖成了验证后的纯数组,导致后续无法调用实例方法。
  3. 两处拼写错误:slig应为slug,返回字段staus应为status。

修复后的代码

public function update(Request $request)
{
    // 用findOrFail替代find,找不到对应ID时自动抛出404异常,更严谨
    $grade = Grade::findOrFail($request->id);

    // 验证数据并存入单独变量,避免覆盖模型实例
    $validatedData = $request->validate([
        'title' => 'required|string',
        'slug' => 'string',
        'description' => 'string',
    ]);

    // 通过模型实例调用update方法完成更新
    $grade->update($validatedData);

    return [
        'status' => 'success',
        'grade' => $grade,
    ];
}

补充说明

如果需要批量更新多条记录,Laravel确实支持静态update()方法,但需搭配查询条件,比如Grade::where('id', $id)->update($validatedData),不过这种方式不会触发模型的生命周期事件(比如updated钩子),单条记录更新建议用实例调用的方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 19:57:25