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

Laravel Livewire 2数据库字段自增报错:Illegal offset type

问题描述

我是Laravel和Livewire新手,尝试实现数据库中字段值自增操作时,遇到以下错误:

报错信息

TypeError 
Illegal offset type

组件代码

public $Received_Amount; //接收数字输入值,例如100,200,1,3

public function submit( ) 
{
  DB::table('users')->where('Id','=', Auth::user()->Id)->increment(['Received_Amount' => $this->Received_Amount]); 
}

表单代码

<form wire:submit.prevent="submit">
   <div class="col-lg-4 col-sm-6">
     <div class="form-group">
       <div class="form-control-wrap">
         <label>Received Amount <label style="color:red;">*</label>
         </label>
         <input type="text" wire:model="Received_Amount" class="form-control form-control-outlined form-control-outlined">
       </div>
     </div>
   </div>
   <button type="submit" class="btn btn-xl btn-primary">SAVE APPLICATION</button>
</form>

错误原因

你误用了Laravel increment方法的参数格式:该方法第一个参数是字段名字符串,第二个可选参数是自增的数值(默认值为1),而不是传入关联数组。传数组的操作导致框架解析时触发非法偏移类型错误。

修正后的代码

调整increment的参数格式即可解决问题:

public $Received_Amount;

public function submit() 
{
    // 强制转换为整数,避免非数字输入引发异常
    $incrementValue = (int)$this->Received_Amount;
    
    DB::table('users')
        ->where('Id', Auth::id()) // 简化写法,Auth::id()直接返回当前用户ID
        ->increment('Received_Amount', $incrementValue);
}

额外优化建议

  1. 添加输入验证:在Livewire组件中增加规则,确保输入为有效数字,提前拦截非法内容:
protected $rules = [
    'Received_Amount' => 'required|integer|min:1',
];

public function submit()
{
    $this->validate(); // 触发前端验证
    
    $incrementValue = (int)$this->Received_Amount;
    
    DB::table('users')
        ->where('Id', Auth::id())
        ->increment('Received_Amount', $incrementValue);
}
  1. 检查数据库字段类型:确认users表的Received_Amount字段为数值类型(如int、decimal),否则自增操作会失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 23:17:18