Laravel 9特定仪表更新时日期唯一验证报错的解决方法
问题解决:Laravel更新时日期唯一性验证报错
你的问题出在unique验证规则的参数顺序错误。Laravel的unique规则中,第四个参数是要忽略的记录对应的主键字段名(默认是id),而你错误地写了meter,导致验证时没有正确忽略当前要更新的记录,所以即使是修改自身的日期(未改动的情况下)也会触发重复提示。
修正后的update方法验证规则:
public function update(Request $request, MeterReading $meterreading) { $updateData = $request->validate([ 'date' => 'required|date|unique:meterreading,date,'.$meterreading->id.',id,meter,'.$request->get('meter'), ]); }
规则参数说明:
unique:meterreading,date:指定验证meterreading表的date字段唯一性'.$meterreading->id.':要忽略的记录ID(当前正在更新的这条记录)id:忽略记录对应的主键字段名(你的模型主键是id,这里必须明确指定,之前你写的meter是错误的)meter,'.$request->get('meter'):额外条件,限制只校验meter字段等于当前请求值的记录
另外可以优化写法,用Laravel的验证规则数组写法更清晰,避免字符串拼接的混乱:
use Illuminate\Validation\Rule; public function update(Request $request, MeterReading $meterreading) { $updateData = $request->validate([ 'date' => [ 'required', 'date', Rule::unique('meterreading')->where(function ($query) use ($request) { return $query->where('meter', $request->get('meter')); })->ignore($meterreading->id), ], ]); }
这种方式可读性更强,也不容易出错,推荐使用。
内容的提问来源于stack exchange,提问作者Sona Rijesh
相关产品推荐
相关产品推荐

