Laravel更新area_managers数据时如何实现跨表邮箱唯一性校验
问题原因
你的校验规则本身针对area_managers表的唯一性判断已经添加了排除当前记录的逻辑,正常情况下不会拦截待更新用户本身的已有邮箱,出现问题通常是两个原因:
area_managers表的主键不是默认的id,唯一校验规则找不到对应排除字段- 你的数据更新写法有误,导致校验通过后数据没有正常保存,误以为是校验拦截了本身的邮箱
修复后代码
public function update(Request $request, AreaManager $areaManager) { $request->validate([ 'email' => 'required|email|unique:shopkeepers,email|unique:area_managers,email,'.$areaManager->id, // 若area_managers表主键不是id,替换为下方规则,将最后的area_manager_id改为你实际的主键字段名 // 'email' => 'required|email|unique:shopkeepers,email|unique:area_managers,email,'.$areaManager->id.',area_manager_id', ]); // 正确的更新写法二选一即可 // 写法1:直接传入参数更新 $areaManager->update($request->only('email')); // 写法2:赋值后调用save方法 // $areaManager->email = $request->email; // $areaManager->save(); return redirect()->route('area_manager.edit', $areaManager->id); }
规则说明
unique:shopkeepers,email规则会校验邮箱在shopkeepers表全局唯一,不存在任何例外,符合你的需求:区域经理邮箱不能和店主邮箱重复unique:area_managers,email,'.$areaManager->id规则会校验邮箱在area_managers表中唯一,同时跳过主键为$areaManager->id的当前记录,允许用户保留原有邮箱
内容的提问来源于stack exchange,提问作者Meheraj Hossain
相关产品推荐
相关产品推荐

