通过在验证中传递id,更新时的Laravel唯一验证无效

通过在验证中传递id,更新时的Laravel唯一验证无效,laravel,laravel-validation,Laravel,Laravel Validation,在我的控制器中,我一次在三个不同的表中插入数据。 我在插入一些唯一字段之前进行了验证。但在更新时,它说电子邮件已经存在。我搜索了很多,通过在验证规则中传递id,得到了一个对除我之外的所有人都有效的解决方案 我试过了 $this->validate($request,[ 'admission_no'=>"required|unique:students,admission_no,$id", 'student_email=>"required|unique:stud

在我的控制器中,我一次在三个不同的表中插入数据。 我在插入一些唯一字段之前进行了验证。但在更新时,它说电子邮件已经存在。我搜索了很多,通过在验证规则中传递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();
这样不行我不知道为什么
另外,主要问题是学生家长模型不同,如何在验证过程中传递此模型的id以进行唯一更新

您的
学生
学生家长
表具有不同的
$id
,因此,您需要通过
guardian\u电子邮件上的
student\u parents
table
id
验证:

$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
]);

希望这有助于您的
学生
学生家长
表格具有不同的
$id
,因此您需要通过
监护人电子邮件上的
学生家长
表格
id
验证:

$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
]);

希望这有帮助

您已经输入:'student_email->“必选|唯一:学生,学生电子邮件,$id”,应该是:“student_email”=>必选|唯一:学生,学生电子邮件,$id,插入新记录时从验证中删除id。仅在更新信息时使用。@OMR抱歉,这是一个错误typo@uditrawat我正在更新一条记录$validatedData=$request->validate(['入学号=>'必填项|唯一:学生,入学号,.$id]);尝试这样做,同时检查$validateData->passes()是否通过,然后更新记录。您输入的“学生电子邮件->”必需|唯一:学生,学生电子邮件,$id”应该是:“学生电子邮件”=>必需|唯一:学生,学生电子邮件,$id,插入新记录时从验证中删除id。仅在更新信息时使用。@OMR抱歉,这是一个错误typo@uditrawat我正在更新一条记录$validatedData=$request->validate(['入学号=>'必填项|唯一:学生,入学号,.$id]);尝试这样做,同时检查$validateData->passes()是否正确,然后更新记录。