【问题标题】:Laravel unique validation on update not working by passing id in validationLaravel 对更新的唯一验证通过在验证中传递 id 不起作用
【发布时间】:2020-10-02 06:07:44
【问题描述】:

在我的控制器中,我一次在三个不同的表中插入数据。 在插入一些独特的字段之前,我已经进行了验证。但是在更新时它说电子邮件已经存在。我进行了很多搜索,并通过在验证规则中传递 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 传递给唯一更新

【问题讨论】:

  • 你输入了:'student_email->"required|unique:students,student_email,$id",应该是:"student_email"=>required|unique:students,student_email,$id",
  • 在插入新记录时从验证中删除 id。仅在您更新信息时使用。
  • @OMR 抱歉打错了
  • @uditrawat 我正在更新记录
  • $validatedData = $request->validate([ 'admission_no' => 'required|unique:students,admission_no,' . $id ]);像这样尝试并检查 $validateData->passes() 是否然后更新记录。

标签: laravel laravel-validation


【解决方案1】:

你的students和student_parents表有不同的$id,所以你需要通过student_parents表id对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
]);

希望对你有帮助

【讨论】:

    猜你喜欢
    • 2021-08-07
    • 1970-01-01
    • 2014-08-20
    • 1970-01-01
    • 2014-06-28
    • 1970-01-01
    • 2020-07-07
    • 1970-01-01
    • 2018-05-24
    相关资源
    最近更新 更多