【问题标题】:Generating Multiple Student Report Sheets in one web page在一个网页中生成多个学生报告表
【发布时间】:2018-12-11 07:52:09
【问题描述】:

我正在构建一个学生管理应用。我被困在查看课堂报告中。我可以显示班级中每个学生的个人报告(分数、百分比、个人详细信息、精神运动领域等)。但是我需要在一个网页中显示一个班级中每个学生的所有报告,并在它们之间显示分页符。因此,我们将在很长的网页上显示 Student1 的所有分数和信息,Student2 的所有分数和信息等。我在 DB 上的结果表有 studentId 和 StudentClass 列来区分事物。我觉得我应该使用 forloop,但不知道如何使用。下面是我的控制器:

public function viewclassresults(Request $request){



   $term = $request->get('term');
   if ($term ==1) {
       $termended = "First";
   }
   $session = $request->get('session');
   $sessionnow = Session::where('id', $session)->first()->name; 
   $classname = $request->classname;
   $class_id = $request->class_id;
   $teachersignature = Stclass::where('id', $class_id)->first()->teachersignature;
   $teachername = Stclass::find($class_id)->teachers()->first()->fullName;

   $setting = Setting::all()->first(); 

   $grades = DB::table('grades')->get();
   $comments = Comment::all();

      $results = DB::table('results')
                    ->where('studentClass', $class_id)->where('session', $session)->where('term', $term)->whereNull('deleted_at')
                    ->selectRaw('results.*, (results.test1 + results.test2)/2 as cav, (results.exam + (results.test1 + results.test2)/2)/2 as totalmark, results.studentId as classstudents')->get();









       $rating = DB::table('ratings')->where('term', $term)->where('session', $session)->first();



        if($results->isEmpty()){

           return "No Result";
          // 
        } else{
            return view('teacher.results.viewclassresults', compact('subjects', 'studentname', 'regNumber', 'studentClass', 'studentId', 'term', 'session', 'results', 'student', 'setting', 'sessionnow', 'classname', 'termended', 'grades', 'comments', 'rating', 'teachername', 'resultpercent', 'resultpercentclass', 'teachersignature', 'classstudents'));
          // 
      }



}

实际显示单个结果的是 $results。请注意,resultid (id) 是我的结果表中的唯一主键。以下是我的表格的一部分:

my results table

【问题讨论】:

    标签: php mysql laravel eloquent


    【解决方案1】:

    我正在使用constraint eager loading.

    $student = Student::with(['results'=> function($q1) use ($term, $studentId) {
        $q1->where('term', $term)
        ->where('studentId', $studentId)
        ->whereNull('deleted_at')
        ->selectRaw('results.*, (results.test1 + results.test2) as cav, results.exam + results.test1 + results.test2 as totalmark');
    
    },'ratings' => function($q2) use ($term, $session){
        $q2->where('term', $term)
        ->where('session', $session)
        ->first();
    }])->get();
    
    return view('view.template',compact('student'));
    

    我看到你有很多结果。你可以在你的学生模型上添加一个方法,然后用它加载不同类型的结果。我不确定你的关系是什么,但你基本上只是一直在上面链接。

    不需要控制器中的条件语句。您可以在视图中完成所有这些操作并指定不同的部分。

    视图看起来类似于这样

    @foreach($student as $student)
        @if($student->result->empty())
            <h1>No student result.</h1>
        @else
            @foreach($student->result as $result)
                //Get student result
            @endforeach
        @endif
    @endforeach
    

    此代码未经测试。希望能帮助到你。

    【讨论】:

    • 感谢您的回答。请检查我对原始问题的编辑。
    • 非常抱歉没有就此回复您。您建议的解决方案虽然对我来说很新颖,但由于我对 Laravel 的了解很浅,看起来不错。但是,我不得不删除 $studentId,因为它在我的原始代码中未定义。但是,当我运行代码时,我得到“为 foreach() 提供的参数无效”。我注意到问题出在内部 foreach 上。你能检查一下吗?非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多