Livewire唯一值验证函数异常:输入有效值时执行卡住
问题解决方法
你的问题出在两个核心点上:
1. 验证规则错误匹配所有行
原来的rows.*.p1会验证所有行的p1字段,哪怕你只编辑了其中一行,只要其他行存在不符合规则的情况(比如空值、重复),validate就会静默失败,但你的错误提示只显示当前编辑行的内容,导致你看不到错误,误以为验证通过却卡在方法里。
2. 唯一验证的忽略ID取值错误
你用了$this->row['id'],但这个变量并非当前编辑行的ID,甚至可能不存在。当ID为null时,Rule::unique不会忽略任何记录,哪怕你输入的是当前行原本的p1值,也会被判定为重复,验证失败却没有对应的错误提示,导致流程卡在validate步骤。
修改后的组件代码:
public function savePaper($rowIndex) { // 获取当前编辑的行数据 $currentRow = $this->rows[$rowIndex] ?? null; // 只验证当前行的p1字段,同时正确传入要忽略的ID $this->validate([ "rows.$rowIndex.p1" => [ 'required', Rule::unique('dutysheets', 'p1') ->ignore($currentRow ? $currentRow['id'] : null) ], ]); dd('save called'); if (!is_null($currentRow)) { optional(DutySheet::find($currentRow['id']))->update($currentRow); } $this->editedRowIndex = null; $this->editedPaper = null; }
额外提示:
视图里的wire:model.differ是拼写错误,正确的延迟绑定指令是wire:model.defer,虽然移除唯一规则后功能正常,但建议修正这个错误,避免后续出现其他潜在问题。
内容的提问来源于stack exchange,提问作者Khalil
相关产品推荐
相关产品推荐

