Livewire通过复选框操作pivot中间表仅能新增无法删除记录求助
问题原因
你的推测完全正确,问题核心是$userCompanies数组内的ID类型不统一:
- 页面初始化
mount阶段从数据库查询取出的company_id是整型 - 前端复选框提交的值默认是字符串类型,新勾选的ID会以字符串格式存入数组
Laravel的sync方法做关联匹配时是严格区分数据类型的,整型1和字符串"1"会被判定为不同的值,因此取消勾选原有的整型ID时,方法无法匹配到对应需要删除的关联项,导致中间表记录不会被删除。
解决方案
只需要在调用sync方法前,把数组内所有ID统一转为整型即可,修改updatedUserCompanies方法:
public function updatedUserCompanies() { // 统一将所有ID转为整型,避免类型匹配失败 $syncIds = array_map('intval', $this->userCompanies); $this->user->companies()->sync($syncIds); }
可选优化
可以补充验证规则,确保提交的ID都是合法存在的公司ID,避免脏数据写入:
protected $rules = [ // 原有规则保持不变 'userCompanies.*' => 'integer|exists:companies,id', ];
内容的提问来源于stack exchange,提问作者zaster
相关产品推荐
相关产品推荐

