正确地将不同的作业分配给不同的用户

时间:2018-10-24 23:09:01

标签: php mysql database laravel

我正在建立一个对等标记系统。我希望系统自动分配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();

                               }

                        }
                    }
                }

我的问题是如何限制提交表单保存两次以上。我只希望将一个提交稿分配给两个不同的学生。

这是结果之一。 enter image description here 这是我期望的结果 enter image description here

1 个答案:

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

   });