为不同的用户正确分配不同的作业

cidc1ykv  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(213)

我正在建立一个同行评卷系统。我希望系统自动分配2个不同的提交给学生评分。因此,每个学生可以被分配两个不同的提交给马克,其中两个提交不属于他/她自己。一份作业只能分配给两个不同的学生(提交只能分配两次)
我使用submission表来获取用户的id。提交属于提交。提交表保存学生提交的提交。

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

                               }

                        }
                    }
                }

我的问题是如何限制提交表单保存超过2次。我只想要给两个不同学生的一份作业。
这是一个结果。

这是我预期的结果

xpcnnkqh

xpcnnkqh1#

我自己解决。如果有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();

   });

相关问题