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

Livewire报错:无法将数组赋值给ToggleButton的Model类型属性

解决Livewire ToggleButton组件类型错误:Cannot assign array to property...

错误信息

"Cannot assign array to property App\Livewire\ToggleButton::$model of type Illuminate\Database\Eloquent\Model"

问题根源

从var_dump($tetrazolio)的输出可以明确:你传递给ToggleButton组件的$tetrazolio是数组类型,但组件内的$model属性被声明为Illuminate\Database\Eloquent\Model类型,类型不匹配直接触发报错。

解决方案

方案一:传递Eloquent模型实例(推荐)

如果父组件中的$tetrazolios原本就应该是模型集合,先修正父组件的数据获取逻辑,确保返回Eloquent模型实例而非数组:

比如父组件中原本的代码可能是:

$this->tetrazolios = Tetrazolio::where('setup_id', $setupId)->get()->toArray();

修改为:

$this->tetrazolios = Tetrazolio::where('setup_id', $setupId)->get();

修改后$tetrazolio就是标准的Eloquent模型实例,直接传递给ToggleButton组件即可,无需修改组件代码。

方案二:修改ToggleButton组件适配数组输入

如果业务上必须传递数组,需要调整组件代码适配数组输入:

  1. 更新ToggleButton组件代码:
<?php

namespace App\Livewire;

use Illuminate\Contracts\View\View;
use Illuminate\Database\Eloquent\Model;
use Livewire\Component;

class ToggleButton extends Component
{
    public array $modelData; // 接收数组格式的记录数据
    public string $modelClass; // 指定对应的模型类,如App\Models\Tetrazolio
    public string $field;
    public bool $enabled;

    public function mount(): void
    {
        $this->enabled = (bool) $this->modelData[$this->field];
    }

    public function render(): View
    {
        return view('livewire.toggle-button');
    }

    public function updating($field, $value): void
    {
        // 通过记录ID找到对应模型实例并更新
        $model = $this->modelClass::find($this->modelData['id']);
        if ($model) {
            $model->setAttribute($this->field, $value)->save();
        }
    }
}
  1. 在父视图中传递数组和模型类参数:
<livewire:toggle-button
    :model-data="$tetrazolio"
    model-class="App\Models\Tetrazolio"
    field="enabled"
/>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 14:04:51