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

Laravel中update返回int而非Model实例致ActivityLogger参数错误求助

错误原因
  • Laravel框架中,直接通过查询构造器调用update()方法时,返回值为受影响的行数(整数类型),而非更新后的模型实例,这是框架的原生设计。你将返回的整数传入要求传入Illuminate\Database\Eloquent\Model实例的performedOn()方法,就会触发类型不匹配报错。
解决方案

你需要先查询得到对应的Sales模型实例,再执行更新操作,常用两种写法:

写法1:先查实例再更新

public function cancel_bill_cash_store(Request $request){
    // 先查询匹配的模型实例
    $sales_cancel = Sales::where('bill_number',$request->bill_number)->first();
    // 调用模型实例的update方法,返回布尔值标识更新是否成功
    $update_result = $sales_cancel?->update([
        "cancel_bill" => 1,
        "bill_status" => $request->bill_status,
    ]);

    if ($update_result) {
        activity('Sales')
        ->performedOn($sales_cancel) // 传入查询得到的模型实例即可
        ->causedBy($user)
        ->log('Cancelled Bill by ' . $user->name . ' with IP '.request()->ip());

        toastr()->success(' Bill- '.$request->bill_number.' Imeshakuwa Cancelled Vizuri!, 
        Device Zimerudi Store');
        return redirect()->back();
    } else {
        toastr()->error('Error: Kuna Kitu Kimekwenda Wrong !. Otherwise check Support.');
        return redirect()->back();
    }
}

写法2:用tap辅助函数简化代码

如果不想单独定义变量存储更新结果,可以用Laravel提供的tap函数,直接拿到更新后的模型实例:

$sales_cancel = tap(Sales::where('bill_number',$request->bill_number)->first())->update([
    "cancel_bill" => 1,
    "bill_status" => $request->bill_status,
]);

tap函数会忽略update()的返回值,直接返回传入的模型实例,后续直接把$sales_cancel传给performedOn()即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 04:57:03