laravel 7验证唯一多列

时间:2020-09-21 20:38:28

标签: laravel

如何对多列进行修饰

表名“ exam_starts”

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

如何在表exam_starts中唯一地排列student_id和exam_class_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)

1 个答案:

答案 0 :(得分:1)

使用“唯一”规则类,您可以将多个位置传递给它,以创建一个包含两列的唯一约束。

ID1    ID2    DateFld    ...
1      24
1      24
2      23
3      98
4      23
4      23
5      98
6      72

将其设置为验证状态

(new Unique('exam_starts'))
    ->where('student_id ', $request->student_id)
    ->where('exam_class_id', $request->exam_class_id);