Laravel 通过在验证中传递 id 无法对更新进行唯一验证

Laravel unique validation on update not working by passing id in validation

在我的控制器中,我一次在三个不同的 table 中插入数据。 在插入一些独特的字段之前,我已经进行了验证。但是在更新时它说电子邮件已经存在。我进行了很多搜索并找到了一个解决方案,该解决方案通过在验证规则中传递 id 对除我以外的所有人都有效。

我试过了

$this->validate($request,[
    'admission_no'=>"required|unique:students,admission_no,$id",
    'student_email=>"required|unique:students,student_email,$id",
     'guardian_email'=>"required|unique:student_parents,guardian_email,$id"
]);

$student = Student::find($id);
$student->admission_no = $request->admission_no;
$student->student_email = $request->student_email;
$student->save();
//parent model
$parent = StudentParent::where('student_id',$student->id)->first();
$parent->guardian_email = $request->guardian_email;
$parent->save();

这样不行我不知道为什么 主要问题还在于 StudentParent 模型不同如何在验证中将此模型的 id 传递给唯一更新

你的studentsstudent_parentstable有不同的$id,所以你需要通过student_parentstableid关于 guardian_email 验证:

$validatedData = $request->validate([
    'admission_no'=>"required|unique:students, admission_no, $id", // expect students table id
    'student_email'=>"required|unique:students, student_email, $id", // expect students table id
    'guardian_email'=>"required|unique:student_parents, guardian_email, $student_parents_id" // pass student_parents table id here
]);

希望对您有所帮助