Laravel - Как сделать суммарный балл урока не более максимального балла по курсу - PullRequest
0 голосов
/ 20 февраля 2020

Я занимаюсь разработкой веб-приложения для управления курсами студентов с использованием Laravel -5,8

Моделей

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 в таблице курсов для этого конкретного курса, приложение должно отображать сообщение и не должно позволять пользователю отправлять.

Как мне достичь этого?

Спасибо.

1 Ответ

1 голос
/ 20 февраля 2020

В магазине метод, вы можете написать ниже код:

$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')]);
}

Вы можете использовать floatval () вместо intval () в случае, если ваши оценки в десятичных числах

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...