2014-06-16 4 views
1

후보자가 투표되는 Lolavel 4에서 간단한 투표 응용 프로그램을 작성합니다. 나는 일대 다 관계로 후보자와 투표를하는 두 개의 실체를 가지고 있습니다. 누군가가 버튼을 클릭하면 후보자의 ID를 얻고 하나의 필드가 candidate_id 인 투표 테이블에 저장합니다. 나는 내가 그렇게Laravel 4의 다른 컨트롤러에서 뷰에 변수 전달

$candidates = Candidate::all(); 
return View::make('votes.voteresults',['candidates'=>$candidates]); 

행으로 표를 저장하는 건가요처럼 모든 후보자를 전달 voteresults라는 또 다른 VoteController 기능이 위의에서이

$vote = new Vote; 
$candidate_id =Input::get('name'); 
$candidate = Candidate::find($candidate_id); 
$vote = $candidate->votes()->save($vote); 
$count = DB::table('votes')->where('candidate_id','==','$candidate_id')->count(); 

Session::flash('message', 'Successfully Cast your vote!'); 
return Redirect::to('voteresults')->with('count',$count); 

과 같은 votesuccess라는 VoteController 기능이 이 코드를 따라서 행 수를 계산하여 투표 수를 계산하고 싶습니다.

$count = DB::table('votes')->where('candidate_id','==','$candidate_id')->count(); 

am 시도 후보 정보 플러스 그들이 보이는 voteresults라는 관점에서 가지고 투표 수 모두에 액세스 할 수 보내고이

<tbody> 
@foreach($candidates as $key => $value) 
    <tr> 
     <td><img src="{{$value->avatar->url('thumb')}}" alt="..."></td> 
     <td>{{ $value->name }}</td> 
     <td>{{ $value->manifesto }}</td> 
     <td> 
      {{ $count }} 
     </td> 
    </tr> 
@endforeach 
</tbody> 

오전 내가 투표 수를 캡처 할 수 있도록보기로 $count 변수를 전달하려고 시도 후보자에게. 이런 식으로 할 수 있는지, 아니면 할 수있는 좋은 방법이 있는지 나는 모른다. 내가 이것을 실행하려고 할 때 나는 얻는다. undefined variable count 어떤 안내도 환영한다.

답변

2

내가 올바르게 얻으면 컨트롤러에서보기로 서로 다른 두 가지 (후보 및 표)를 전달하고 싶습니까?

컨트롤러 :

$candidates = Candidate::all(); 
    $count = DB::table('votes')->where('candidate_id','=','$candidate_id')->count(); 
    return View::make('votes.voteresults')->with('candidates', $candidates)->with('count',$count); 

보기 :

<tbody> 
@foreach($candidates as $key => $value) 
    <tr> 
     <td><img src="{{$value->avatar->url('thumb')}}" alt="..."></td> 
     <td>{{ $value->name }}</td> 
     <td>{{ $value->manifesto }}</td> 
     <td> 
      {{ $count }} 
     </td> 
    </tr> 
@endforeach 
</tbody> 

이 문서를 참조하십시오 : 나는 당신이 하나의 문제는 $count 쿼리에 대한 사용자의 위치를 ​​기준 내에서 당신이 가지고있다 생각 Views

+0

Y 그것은 작동하지만 카운트 변수는 모든 후보에 대해 0을 반환 할 수 있습니다. 아마도 내 쿼리에 문제가있을 수 있지만 특정 'candidate_id'가있는 모든 행을 어떻게 계산합니까? –

+0

아하하. jwalton512의 업데이트 된 답변을 참조하십시오. 그게 올바른 방법이라고 생각합니다. –

+0

예, 저에게는 효과가있었습니다. 감사합니다. –

1

$candidate_id 작은 따옴표 안에 변수가 있습니다. 나는 테스트하지 않았지만 아래 코드를 시도해보십시오. 당신의 VoteResults 컨트롤러에서

public function getTotalVotesAttribute() 
{ 
    return $this->hasMany('Vote')->whereCandidateId($this->id)->count(); 

} 

:

$vote = new Vote; 
$candidate_id =Input::get('name'); 
$candidate = Candidate::find($candidate_id); 
$vote = $candidate->votes()->save($vote); 

Session::flash('message', 'Successfully Cast your vote!'); 
return Redirect::to('voteresults'); 

과 유사한 Candidate 모델에 메서드를 추가

$candidates = Candidate::all(); 
return View::make('votes.voteresults',['candidates'=>$candidates]); 

당신의 voteresults보기에서 :

<tbody> 
@foreach($candidates as $key => $value) 
    <tr> 
     <td><img src="{{$value->avatar->url('thumb')}}" alt="..."></td> 
     <td>{{ $value->name }}</td> 
     <td>{{ $value->manifesto }}</td> 
     <td> 
      {{ $value->total_votes }} 
     </td> 
    </tr> 
@endforeach 
</tbody> 
+0

작동하지만 모든 후보자에게 하나의 번호, 특히 내가 투표 한 후보자의 번호를 표시하는 것으로 보입니다. 각 후보자에게 개별 투표를 표시하려면 어떻게합니까? –

+1

편집 된 코드가 조금이라도 있으면 알려주세요. – jwalton512

+0

네, 완벽하게 고마워합니다. –

관련 문제