2014-06-16 86 views
1

我在Laravel 4中構建了一個簡單的投票應用程序,其中候選人正在進行投票。我有兩個實體候選人和投票與一對多的關係。當有人點擊一個按鈕時,我得到候選人的ID並將其存儲在投票表中,只有一個字段candidate_id。我有一個VoteController函數調用votesuccess看起來像這樣將變量傳遞給Laravel 4中另一個控制器的視圖

$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); 

從上面我有一個名爲voteresults另一VoteController功能,這是我在所有的考生通過像這樣

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

AM存儲票爲行我想通過計算行數來計算投票數,因此此代碼

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

上午嘗試荷蘭國際集團訪問所有候選信息以及他們從一個叫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> 

看到這個文檔: Views

+0

ÿ它的工作原理,但計數變量爲所有候選人返回零可能是我的查詢出了問題,但我如何計算具有特定'candidate_id'的所有行。 –

+0

好的,看jwalton512的更新回答。我相信這是做到這一點的正確方法。 –

+0

是的,它爲我工作謝謝。 –

1

我相信你有一個問題是,你在那裏標準$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模式與此類似地址:

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

} 

在你VoteResults控制器:

$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

是的,它完美謝謝。 –

相關問題