2016-03-21 85 views
2

我有一個可以創建投票的後端。在投票中,我可以創建一個投票問題。對於投票問題,我可以創建很多PollAnswer。獲取發生次數

如果我做這樣的事情在我的控制器

$poll = DB::table('poll')->orderBy('id', 'desc')->first(); 
$question = DB::table('poll_question')->where('poll_id', $poll->id)->first(); 
$answers = DB::table('poll_answer')->select('answer')->where('question_id', $question->id)->get(); 

print_r("<pre>"); 
    print_r($answers); 
print_r("</pre>"); 

我可以看到如下

Array 
(
    [0] => stdClass Object 
     (
      [answer] => Answer 1 
     ) 

    [1] => stdClass Object 
     (
      [answer] => Answer 2 
     ) 

    [2] => stdClass Object 
     (
      [answer] => Answer 3 
     ) 

    [3] => stdClass Object 
     (
      [answer] => Answer 4 
     ) 

) 

所以輸出,上述投票給出4個可能的答案,PollQuestion。

現在我有一個顯示問題的前端,以及每個PollAnswer的單選按鈕。當他們選擇並保存時,我會得到一個PollResponse。如果我做這樣的事情

$pollResponses = DB::table('poll_response')->select('response')->where('poll_id', $poll->id)->get(); 

輸出可能是這樣的

Array 
(
    [0] => stdClass Object 
     (
      [response] => Answer 1 
     ) 

    [1] => stdClass Object 
     (
      [response] => Answer 4 
     ) 

    [2] => stdClass Object 
     (
      [response] => Answer 4 
     ) 

    [3] => stdClass Object 
     (
      [response] => Answer 2 
     ) 

    [4] => stdClass Object 
     (
      [response] => Answer 3 
     ) 
) 

所以我可以看到人們選擇什麼。現在,對於每個可能的PollAnswer,我需要計算與其相關的PollResponse的數量。因此,對於上述數據,我應該得到的東西像

1 = 1 
2 = 1 
3 = 1 
4 = 3 

有沒有簡單的方法可以讓我在Laravel做到這一點,或者我需要循環兩種答案和響應,以獲得單獨計數?

感謝

回答

2

我不知道任何特定laravel的解決方案的,但你總是可以推動應對一個單獨的數組,然後將新陣列上使用PHP函數array_count_values($array)http://php.net/manual/en/function.array-count-values.php)。

$newArray = array(); 
for($i=0; $i < count($pollResponses); $i++){ 
    array_push($newArray, $pollResponses[$i]->response); 
}; 

$count = array_count_values($newArray); 

它將返回一個二維數組,其答案是關鍵字以及它作爲值發生的次數。

1

假設你正在使用的模型,你可以做到這一點在Laravel

$polls = Poll::with(['questions.answers'])->get(); 

你Poll.php文件

... 
class Poll extends Model{ 
    public function questions(){ 
     return $this->hasMany(Question::class); 
    } 
} 

你Question.php文件

... 
class Question extends Model{ 
    public function answers(){ 
     return $this->hasMany(Answer::class); 
    } 
} 

而且然後在你的視圖文件中(假設它是.blade.php)

@foreach($polls as $poll) 
    @foreach($poll->questions as $question) 
     {{ $question->title }} 
     <ul> 
      @foreach($question->answers as $answer) 
       <li>{{ $answer->title }} </li> 
      @endforeach 
     </ul> 
    @endforeach 
@endforeach