Laravel中通过Action更新Demande模型数据报错:Call to a member function update() on array
问题解决方案
这个错误的核心原因是传递给Action的$model是数组,而非Eloquent模型实例,所以无法调用update()方法。以下是分步修复方案:
1. 修复模型文件语法错误
你的demande.php代码存在严重语法问题,正确写法需根据需求调整:
- 如果是设置允许批量赋值的字段(必须,否则
update()会因批量赋值保护失败):
<?php namespace App\Models; use Illuminate\Database\Eloquent\Model; class Demande extends Model { protected $fillable = ['type', 'statut']; // 允许批量赋值的字段 }
2. 确保Action接收模型实例
方案一:从根源传递模型实例
检查Livewire表格组件的触发逻辑,确保触发Action时传递的是模型实例而非数组。比如在Laravel Livewire Tables组件中,行动作默认传递$record(模型实例),需确认你的调用逻辑正确传递了模型对象。
方案二:在Action中兼容数组(临时修复)
如果暂时无法修改传递逻辑,可在Validate.php中先将数组转换为模型实例:
<?php namespace App\Actions; use App\Models\Demande; use Illuminate\View\View; class Validate { public function handle($model, View $mainValidator) { // 若传入的是数组,通过主键获取模型实例 if (is_array($model)) { $model = Demande::findOrFail($model['id']); } $model->update([ 'statut' => 'Validé' ]); } }
3. 检查Livewire组件的数据来源
确保ValPcTableView.php中渲染表格的数据是Demande模型集合,而非数组。比如查询数据时使用:
// 正确:返回模型集合 $demandes = Demande::all(); // 错误:返回数组,会导致行数据是数组 $demandes = Demande::all()->toArray();
内容的提问来源于stack exchange,提问作者user20537512
相关产品推荐
相关产品推荐

