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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 01:40:25