我正在建立一个对等标记系统。我希望系统自动分配2个不同的提交给学生以进行标记。因此,可以为每个学生分配两个不同的提交标记,并且其中两个提交不属于他/她自己。提交内容只能分配给2个不同的学生。 (一次提交只能分配两次)
我使用提交表获取user_id。模型AssignSubmission有很多Submission。提交属于AssignSubmission。提交表保存学生提交的提交。
public function handle(){
$students = Submission::all();
foreach ($students as $student) {
$jobs = Submission::all()->shuffle();
$i = 0;
foreach ($jobs as $job) {
if (($job->user_id !== $student->user_id) && ($i<2) ) {
$i++;
$newjob = New AssignSubmission;
$newjob->submission_id = $job->id;
$newjob->user_id = $student->user_id;
$newjob->save();
}
}
}
}
我的问题是如何限制提交表单保存两次以上。我只希望将一个提交稿分配给两个不同的学生。
答案 0 :(得分:0)
我自己解决这个问题。 如果有15个学生,则有15个作业,并且很简单地保证他们不会得到家庭作业。只要按顺序排列,第一名同学将排在第二位,第二名将排在第三位。 。 ...最终获得第一名。但是,这有局限性,我可以猜到我会得到谁。然后它变成一个变量
public function handle()
{
$students = Submission::orderBy('user_id','asc')->get(['user_id','id']);
$word=$students->pluck('id')->toArray();
$count_student =count($students);
$random_num = mt_rand(1,$count_student-1);
$word_num= 2;//How many jobs per person
$students->map(function($student,$k)use($word,$count_student,$random_num,$word_num){
$arr=[];// save submission id
for ($for_i=0;$for_i<$word_num;$for_i++){
$index = $k+$random_num+$for_i;
if(!isset($word[$index]))
{
$index-=$count_student;
}
$arr[]=$word[$index];
}
$student->homeworks = $arr;
$newjob = New AssignSubmission;
$newjob->submission_id = $student->homeworks[0];
$newjob->user_id = $student->user_id;
$newjob->save();
$newjob = New AssignSubmission;
$newjob->submission_id = $student->homeworks[1];
$newjob->user_id = $student->user_id;
$newjob->save();
});