Laravel-如何使课程总分不超过课程最高分

问题描述 投票:0回答:1

我正在使用Laravel-5.8开发有关学生课程管理的Web应用程序

型号

class Lesson extends Model
{
      protected $table = 'Lessons';
      protected $fillable = [
              'lesson_name',
          'course_id',
          'student_id',
              'score_obtained',
          ];

   public function gradelevel()
    {
        return $this->belongsTo('App\Models\Course','course_id');
    }
    public function student()
    {
        return $this->belongsTo('App\Models\Student','student_id');
    }

}

class Course extends Model
{
  protected $table = 'courses';
  protected $fillable = [
              'course_code',
              'course_name',
              'max_score',
          ];
}  

控制器

class LessonController extends Controller
{
    public function create()
    {
      $courses = Course::all();
      $students = Student::all();
      return view('lessons.create')->with('courses', $courses)->with('students', $students);
    }

    public function store(StoreLessonRequest $request)
    {
     try {
            $lesson = Lesson::create([
                'lesson_name'       => $request->lesson_name,
                'course_id'             => $request->course_id,
                'lesson_id'             => $request->lesson_id,
                'score_obtained'            => $request->score_obtained,
            ]);
            Session::flash('success', 'Lesson is created successfully');
            return redirect()->route('lessons.index');
    } catch (Exception $exception) {
            Session::flash('danger', 'Lesson creation failed!');
            return redirect()->route('lessons.index');
    }
 }
}

create.blade

   <form  action="{{route('lessons.store')}}" method="post" class="form-horizontal" enctype="multipart/form-data">
       {{csrf_field()}}
       <div class="card-body">
        <div class="form-body">
        <div class="row">

          <div class="col-sm-6">
            <div class="form-group">
                <label>Course</label>
                <select class="form-control select2bs4" data-placeholder="Choose Course" tabindex="1" name="course_id" style="width: 100%;">>
                    <option value="">Select Course</option>
                    @if($courses->count() > 0)
                        @foreach($courses as $course)
                            <option value="{{$course->id}}">{{$course->course_name}}</option>
                        @endforeach
                    @endif
                </select>
            </div>
          </div>

          <div class="col-sm-6">
            <div class="form-group">
                <label>Student</label>
                <select class="form-control select2bs4" data-placeholder="Choose Course" tabindex="1" name="student_id" style="width: 100%;">>
                    <option value="">Select Student</option>
                    @if($students->count() > 0)
                        @foreach($students as $student)
                            <option value="{{$student->id}}">{{$student->student_name}}</option>
                        @endforeach
                    @endif
                </select>
            </div>
          </div>

          <div class="col-sm-6">
            <div class="form-group">
                <label>Lesson<span style="color:red;">*</span></label>
               <input  type="text" name="lesson_name" placeholder="Enter lesson here" class="form-control" value="{{old('lesson_name')}}">
            </div>
          </div>

          <div class="col-sm-6">
            <div class="form-group">
                <label>Obtained Score<span style="color:red;">*</span></label>
               <input  type="text" name="score_obtained" placeholder="Enter score obtained here" class="form-control" value="{{old('score_obtained')}}">
            </div>
          </div>

       </div>
     </div>
    </div>          
    <!-- /.card-body -->
    <div class="card-footer">
            <button type="submit" id="submit_create" class="btn btn-primary">Score</button>
    </div>           

    </form>

每个核心都分配了最高分,这是在设置中完成的。对于每门课程,学生都有一堂课,并且每节课都获得分数。

[我想要实现的是,在课程创建表格上,输入了哪个得分学生,应用程序应总结该学生为该特定课程获得的所有得分(从课程表和刚输入的得分),包括一个得分。在文本框中,如果该值超过该特定课程的课程表的max_score中的值,则应用程序应显示一条消息,并且不允许用户提交。

我该如何实现?

谢谢。

laravel
1个回答
0
投票

在商店方法中,您可以编写以下代码:

$maxScore = Course::find($request->course_id)->max_score;
$scoresObtained = Lession::where('course_id' , $request->course_id)->sum('score_obtained');
$totalScore = intval($scoresObtained) + intval($request->score_obtained);
if($totalScore > $maxScore)
{
   return redirect()->back()->withErrors([__('Total score exceeds max score for selected course')]);
}
© www.soinside.com 2019 - 2024. All rights reserved.