Livewire中wire:model绑定复选框值为字符串 如何转为整数类型
Livewire 复选框绑定值自动转为整数类型解决方案
问题原因
HTML 原生 input 元素的 value 属性默认始终为字符串类型,因此哪怕你传入的$category->id是整数,Livewire 同步绑定时默认也会以字符串格式存入restaurant_categories属性。
解决方案
方案一:使用 Livewire 类型强制转换(推荐,适用于 Livewire 2.x 及以上版本)
在你的 Livewire 组件类中定义$casts属性,指定restaurant_categories为整数数组类型即可,Livewire 会自动完成绑定值的类型转换:
protected $casts = [ 'restaurant_categories' => 'array:int', ];
方案二:使用生命周期钩子手动转换(适用于不支持 $casts 的旧版本 Livewire)
在组件类中添加updated钩子,监听restaurant_categories的变更,手动将数组元素转为整数:
public function updatedRestaurantCategories($value) { $this->restaurant_categories = array_map('intval', $value); }
额外优化建议
你现有代码中的复选框 value 写法建议补充引号,避免特殊场景下的解析错误:
value="{{$category->id}}"
如果你的restaurant_categories是存储选中ID的索引数组,原有选中判断的array_has方法建议替换为in_array,匹配数组结构:
@if(in_array($category->id, $restaurant_categories)) checked @endif
内容的提问来源于stack exchange,提问作者JS_LnMstr
相关产品推荐
相关产品推荐

