Livewire报错:无法将数组赋值给ToggleButton的Model类型属性
错误信息
"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组件适配数组输入
如果业务上必须传递数组,需要调整组件代码适配数组输入:
- 更新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(); } } }
- 在父视图中传递数组和模型类参数:
<livewire:toggle-button :model-data="$tetrazolio" model-class="App\Models\Tetrazolio" field="enabled" />
内容的提问来源于stack exchange,提问作者Clayton Montarroyos
相关产品推荐
相关产品推荐

