2017-11-13 3 views
0

안녕하세요 다시 여러분,컨트롤러에서 문제가 발생했습니다. laravel의 foreach 루프

누구든지이 코드를 도와 줄 수 있습니다.

public function submitranking(Request $req){ 
    $dataCandidate = Candidate::all(); 

    foreach($dataCandidate as $Candidate){ 
     $judgeRate = Score::where('canId',$Candidate->id) 
     ->where('catId',$req->catId) 
     ->where('judgeId',$req->judgeId) 
     ->sum('score'); 
     dd($judgeRate); 
    } 

} 

내가 ($ judgeRate)는 하나의 레코드 만 표시를 위해 dd 때 후보자의 모든 점수를 표시하도록되어? 어떻게하면 루프를 만들고 후보자의 총 합계 점수를 표시 할 수 있습니까? 제발 도와주세요

+1

DD()를 종료 기능을 실행한다. 레코드 당 표시하려는 경우. dd를 var_dump로 변경하십시오. – jonggu

+0

@jonggu가 말한 것처럼, 덤프를 사용하여 루프 내의 모든 데이터를 표시 할 수 없습니다. –

+0

나는 여기에서'sum'을 사용하는 것이 문제라고 생각합니다. 또한 group by를 추가하십시오. 나는 그것이 효과가 있다고 생각한다. 확인하지는 않았지만 언뜻보기에는 작동해야합니다 –

답변

0

이 작업을 시도해야

public function submitranking(Request $req){ 

    $dataCandidate = Candidate::get(); 

    foreach($dataCandidate as $Candidate){ 
     $judgeRate = Score::select('score_id',DB::raw("SUM(score) as score")) 
     ->where('canId',$Candidate->id) 
     ->where('catId',$req->catId) 
     ->where('judgeId',$req->judgeId) 
     ->get(); 

     print('<pre style="color:red;">'); 
     print_r($judgeRate); 
     print('</pre>'); 
    } 
    exit;  
} 
+0

대단히 감사합니다! – EasyWay

+0

@EasyWay : 도와 줘서 기쁩니다! –

+0

@EasyWay : 내 답변이 당신의 솔루션이라면 ** 내 대답에 ** upvote **하십시오. –

0

의 모든 ID를 얻고 whereIn을 사용하려면 을 사용하면됩니다.

그래서 루프를 사용하지 않고 그룹 별 및 간단한 원시 쿼리를 사용할 필요가 없습니다.

https://laravel.com/docs/5.5/queries#where-clauses 당신이 이해 희망 :

그냥 현재 문서를 볼 수 있습니다, 같은

public function submitranking(Request $req){ 

    $dataCandidate = Candidate::all()->pluck('canId'); 

    $judgeRate = Score::whereIn('canId',$dataCandidate) 
       ->where('catId',$req->catId) 
       ->where('judgeId',$req->judgeId) 
       ->select('catId',DB::raw('COUNT(score) as total_score')) 
       ->groupBy('catId') 
       ->get(); 
    dd($judgeRate); 
} 

당신의 기능을 변경합니다.

public function submitranking(Request $req){ 

    $dataCandidate = Candidate::get(); 

    foreach($dataCandidate as $Candidate){ 
     $judgeRate = Score::where('canId',$Candidate->id) 
     ->where('catId',$req->catId) 
     ->where('judgeId',$req->judgeId) 
     ->sum('score'); 

     print('<pre style="color:red;">'); 
     print_r($judgeRate); 
     print('</pre>'); 
    } 
    exit; 
} 

을 또는 당신이 시도해야합니다 :

+0

foreach 루프를 제거한 코드로 루프를 반복하고 싶습니다. 점수를 어떻게 표시 할 수 있습니까? – EasyWay

+0

@EasyWay 기다림을 업데이트하겠습니다. –

+0

@EasyWay 업데이트했습니다. 이거 한번 해봐. –