Search code examples
laravellaravel-validation

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


In my controller i am inserting data in three different table at a time. I have put validation before inserting in some of the unique fields. But at the time of Update it says email already exists. I have searched a lot and got a solution which is working for everyone except for me by passing id in validation rule.

I have tried

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

It doesn't work this way i dont know why also the main problem is StudentParent model is different how to pass id in validation for this model to unique update


Solution

  • Your students and student_parents table has different $id, So you need to pass student_parents table id on guardian_email validation :

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

    Hope this helps