1
votes

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

1
you have type in:'student_email->"required|unique:students,student_email,$id", should be: "student_email"=>required|unique:students,student_email,$id", - OMR
remove id from validation when you inserting new record. use only when you updating info. - udit rawat
@OMR sorry it was a typo - aarush magar
@uditrawat i am updating a record - aarush magar
$validatedData = $request->validate([ 'admission_no' => 'required|unique:students,admission_no,' . $id ]); try like this and also check if $validateData->passes() then update record. - udit rawat

1 Answers

0
votes

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