2014-06-16 64 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

是的,它完美谢谢。 –

相关问题