我有一个可以创建民意调查的后端。在民意调查中,我可以创建一个PollQuestion。对于PollQuestion,我可以创建许多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
)
)
因此,上述民意调查给出了PollQuestion的4个可能答案。
现在我有一个显示问题的前端,以及每个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中执行此操作,或者我是否需要循环使用Answers和Responses来获取个人计数?
由于
答案 0 :(得分: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 :(得分: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