2017-06-04 12 views
0

私はこのエラー "scoresheetController.php行259: Illuminate \ Database \ Eloquent \ Collectionのオブジェクトをintに変換できませんでした" 。親切に以下のコードを見つけてください。データベースに投稿しようとするとエラーが発生します。私はGPAを計算しようとしています

<?php 

    namespace App\Http\Controllers; 


    use App\Http\Requests\scoresheetRequest; 
    use App\Scoresheet; 
    use App\StudentCourse; 
    use Illuminate\Http\Request; 
    use Illuminate\Support\Facades\Input; 
    use DB; 
    use Excel; 
    use Illuminate\Database\Eloquent\Collection; 

    class scoresheetController extends Controller 
    { 
     /** 
     * Create a new controller instance. 
     * 
     * @return void 
     */ 
     public function __construct() 
     { 
      $this->middleware('auth'); 
     } 

     /** 
     * Display a listing of the resource. 
     * 
     * @return \Illuminate\Http\Response 
     */ 
     public function index() 
     { 
      $scoresheet = Scoresheet::select('id', 'code', 'stud_id', 'term', 'year', 'CA_Score', 'exam_score', 'total', 'grade')->get(); 


      return view('admin.results')->with('scoresheet', $scoresheet); 
     } 

     /** 
     * Show the form for creating a new resource. 
     * 
     * @return \Illuminate\Http\Response 
     */ 
     public function create() 
     { 
      // 
     } 

     /** 
     * Store a newly created resource in storage. 
     * 
     * @param \Illuminate\Http\Request $request 
     * @return \Illuminate\Http\Response 
     */ 
     public function store(scoresheetRequest $request) 
     { 
      //dd($request ->all()); 

      $scoresheet = new Scoresheet(); 

      $crdthr = StudentCourse::select('student_courses') 
            ->join('scoresheets', 'student_courses.stud_id', '=', 'scoresheets.stud_id') 
            ->select('student_courses.credit_hrs') 
            ->get(); 

      //Calculate total 
      $total = $request['CA_Score'] + $request['exam_score']; 

      //Calculate the grade 
      switch ($grade = $total) { 
       case $total >=93 && $total==100: 
        $grade = "A+"; 
        break; 
       case $total>=85: 
        $grade = "A"; 
        break; 
       case $total >=77: 
        $grade = "B+"; 
        break; 
       case $total >=70: 
        $grade = "B"; 
        break; 
       case $total >=60: 
        $grade = "C"; 
        break; 
       case $total >=55: 
        $grade = "D+"; 
        break; 
       case $total >=50: 
        $grade = "D"; 
        break; 
       case $total <50: 
        $grade = "F"; 
        break; 
      } 

      //Check for grade equivalent 
      switch ($digit = $grade) { 
       case $grade == "A+": 
        $digit = "4.00"; 
        break; 
       case $grade == "A": 
        $digit = "3.75"; 
        break; 
       case $grade == "B+": 
        $digit = "3.50"; 
        break; 
       case $grade == "B": 
        $digit = "3.00"; 
        break; 
       case $grade == "C+": 
        $digit = "2.50"; 
        break; 
       case $grade == "C": 
        $digit = "2.00"; 
        break; 
       case $grade == "D+": 
        $digit = "1.50"; 
        break; 
       case $grade == "D": 
        $digit = "1.00"; 
        break; 
       case $grade == "F": 
        $digit = "0.00"; 
        break; 
      } 

      //Calculate mini wgt 
      $gpa = $digit * $crdthr; 

      $scoresheet->code = $request['code']; 
      $scoresheet->stud_id = $request['stud_id']; 
      $scoresheet->term = $request['term']; 
      $scoresheet->year = $request['year']; 
      $scoresheet->CA_Score = $request['CA_Score']; 
      $scoresheet->exam_score = $request['exam_score']; 
      $scoresheet->total = $total; 
      $scoresheet->grade = $grade; 
      $scoresheet->grade_digit = $digit; 
      $scoresheet->mini_wgt = $gpa; 

      //dd($gpa); 
      if ($scoresheet->save()){ 
       flash($request['name'].' successfully saved.')->success(); 
       /*echo 'saved';*/ 
      }else{ 
       flash($request['name'].' not saved.')->error(); 
       /*echo 'Not saved';*/ 
      } 

      return redirect()->back(); 
     } 

     /** 
     * Display the specified resource. 
     * 
     * @param int $id 
     * @return \Illuminate\Http\Response 
     */ 
     public function show($id) 
     { 
      // 
     } 

     /** 
     * Show the form for editing the specified resource. 
     * 
     * @param int $id 
     * @return \Illuminate\Http\Response 
     */ 
     public function edit($id) 
     { 
      $scoresheet =Scoresheet::findOrFail($id); 

      return view('admin.result_edit') ->with('scoresheet', $scoresheet); 
     } 

     /** 
     * Update the specified resource in storage. 
     * 
     * @param \Illuminate\Http\Request $request 
     * @param int $id 
     * @return \Illuminate\Http\Response 
     */ 
     public function update(Request $request, $id) 
     { 
      $scoresheet = Scoresheet::findOrFail($id); 


      $crdthr = StudentCourse::select('student_courses') 
       ->join('scoresheets', 'student_courses.stud_id', '=', 'scoresheets.stud_id') 
       ->select('student_courses.credit_hrs') 
       ->get(); 

      $total = $request['CA_Score'] + $request['exam_score']; 

      //Calculate the grade 
      switch ($grade = $total) { 
       case $total >=93 && $total==100: 
        $grade = "A+"; 
        break; 
       case $total>=85: 
        $grade = "A"; 
        break; 
       case $total >=77: 
        $grade = "B+"; 
        break; 
       case $total >=70: 
        $grade = "B"; 
        break; 
       case $total >=60: 
        $grade = "C"; 
        break; 
       case $total >=55: 
        $grade = "D+"; 
        break; 
       case $total >=50: 
        $grade = "D"; 
        break; 
       case $total <50: 
        $grade = "F"; 
        break; 
      } 

      //Check for grade equivalent 
      switch ($digit = $grade) { 
       case $grade == "A+": 
        $digit = "4.00"; 
        break; 
       case $grade == "A": 
        $digit = "3.75"; 
        break; 
       case $grade == "B+": 
        $digit = "3.50"; 
        break; 
       case $grade == "B": 
        $digit = "3.00"; 
        break; 
       case $grade == "C+": 
        $digit = "2.50"; 
        break; 
       case $grade == "C": 
        $digit = "2.00"; 
        break; 
       case $grade == "D+": 
        $digit = "1.50"; 
        break; 
       case $grade == "D": 
        $digit = "1.00"; 
        break; 
       case $grade == "F": 
        $digit = "0.00"; 
        break; 
      } 


      //Calculate mini wgt 
      $gpa = $digit * $crdthr; 

      $scoresheet->code = $request['code']; 
      $scoresheet->stud_id = $request['stud_id']; 
      $scoresheet->term = $request['term']; 
      $scoresheet->year = $request['year']; 
      $scoresheet->CA_Score = $request['CA_Score']; 
      $scoresheet->exam_score = $request['exam_score']; 
      $scoresheet->total = $total; 
      $scoresheet->grade = $grade; 
      $scoresheet->grade_digit = $digit; 
      $scoresheet->mini_wgt = $gpa; 

      if ($scoresheet->save()){ 
       flash($request['name'].' successfully saved.')->success(); 
       /*echo 'saved';*/ 
      }else{ 
       flash($request['name'].' not saved.')->error(); 
       /*echo 'Not saved';*/ 
      } 

      return redirect() ->to('/scoresheet'); 
     } 

     /** 
     * Remove the specified resource from storage. 
     * 
     * @param int $id 
     * @return \Illuminate\Http\Response 
     */ 
     public function destroy($id) 
     { 
      $scoresheet = Scoresheet::findOrFail($id); 

      if (Scoresheet::destroy($id)){ 
       flash ('deleted successfully')->success(); 
      }else{ 
       flash ('failed to delete')->warning(); 
      } 

      return redirect()->back(); 
     } 

    } 

できるだけ早く助けてもらえるとうれしいです。

$crdthr = StudentCourse::select('student_courses') 
    ->join('scoresheets', 'student_courses.stud_id', '=', 'scoresheets.stud_id') 
    ->select('student_courses.credit_hrs') 
    ->get(); 

あなたのコードの後半で以下ここから雄弁コレクションを戻ってきているので、あなたが数学の操作をしようとしている:私はあなたの問題は、コードのこのビットであると言うことができますあなたのコードですぐに見ると

+2

コントローラの太りすぎ、あまりにも多くのコードを探しているデータを取得することができます。あなたの問題を絞ります。 – Devon

+0

あなたはあなたが得るより多くのエラーを投稿してください。おそらくコード内に本当の問題を引き起こす行番号があるはずです。 –

答えて

1

がCollectionオブジェクトである、あなたはそこにデータ形式を参照するためにそれを印刷することができます。通常、あなたはこの質問のための$crdthr[0]-> credit_hrsとして

$gpa = $digit * $crdthr[0]->credit_hrs; 
+0

ありがとうございました。 – Micsedinam

0

このコレクション上:$crdthr以来

//Calculate mini wgt 
    $gpa = $digit * $crdthr; 
+0

はい、どうしたらいいですか? – Micsedinam

+0

ありがとうございます。 – Micsedinam

関連する問題