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); }
额外优化建议
- 添加输入验证:在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); }
- 检查数据库字段类型:确认
users表的Received_Amount字段为数值类型(如int、decimal),否则自增操作会失败。
内容的提问来源于stack exchange,提问作者user12931578
相关产品推荐
相关产品推荐

