laravel 7验证唯一多个列

laravel 7验证唯一多个列,laravel,Laravel,如何对多个列进行viladate 表名“考试开始” 纵队 id exam_id exam_multi_id student_id exam_class_id exam_code_id Status class Student extends Model { // exam public function exams(){ return $this->belongsToMany('App\Exam','exam_sta

如何对多个列进行viladate

表名“考试开始”

纵队

id
exam_id 
exam_multi_id       
student_id  
exam_class_id   
exam_code_id    
Status

class Student extends Model
{
    //    exam
    public function exams(){
        return $this->belongsToMany('App\Exam','exam_starts','student_id','exam_id')
            ->withPivot(['id','exam_multi_id','exam_class_id','exam_code_id','Attend','pass','Status'])- 
      >withTimestamps();
    }
}
如何在表“考试开始”中唯一列“学生id”和“考试类别id”

我的试用控制器

class ExamClassController extends Controller
{
$this->validate($request, [
    'exam_class_id' => [
        'required',
        'integer',
         'unique:exam_startss,exam_class_id,'.$request->exam_class_id .',student_id' ,
    ],
    'student_id' => 'bail|required|integer',
    'exam_start_id' => 'bail|required|integer',
    'exam_id' => 'bail|required|integer',
    'exam_multi_id' => 'bail|required|integer',
    'code' => 'nullable|string',
    'student' => 'bail|required|string',
]);
 }
这是mysql的结果

(SQL: select count(*) as aggregate from `exam_starts` where `exam_class_id` = 1 and `student_id` <> 1)
(SQL:选择count(*)作为“考试开始”的聚合,其中“考试班级id”=1和“学生id”1)

使用Unique rule类,您可以将多个where传递给它,以生成一个包含两列的唯一约束

(new Unique('exam_starts'))
    ->where('student_id ', $request->student_id)
    ->where('exam_class_id', $request->exam_class_id);
像这样将其设置为验证

'exam_class_id' => [
    'required',
    'integer',
    (new Unique('exam_starts'))
        ->where('student_id ', $request->student_id)
        ->where('exam_class_id', $request->exam_class_id),
],