使用GroupBy进行分组和计数-Laravel PHP

时间:2018-07-11 09:09:29

标签: php laravel

我正在为我的学生设计一个问答调查应用程序,下面是我的模型结构,控制器和视图

我要达到的目的是,我要对学生进行分组,并计算学生针对特定问题提交的相似和未回答的内容。

例如

1. Gender 
   a) Male
   b) Female

2. Class
   a) Grade 4
   b) Grade 5

Sudent A selects 1.a  & 2.a

Student B selects 1.a & 2.b

在上面的示例中,两个学生都为第1个问题选择了Male,但对第2个问题的答案却并不相同。

所以我想对相似和不相似的答案进行分组和计数,并在响应页面上显示每个问题。

分组并计数后,我在每个问题上都显示计数,但是在响应页面上的代码如下,这就是我得到的

1. Gender  
    2
    1
    1 
   a) Male      
   b) Female

2. Class
    2
    1
    1 
   a) Grade 4
   b) Grade 5 

注意:在我看来,显示的2,1,1表示2个答案相同,而另外两个(1,1)不相同。

如何使计数显示在下面的各个问题上

   1. Gender                       
      Male - 2

    2. Class                    
       Grade 4 - 1
       Grade 5 - 1

问题

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

答案

class Answer extends Model
{    
    public function survey() {
      return $this->belongsTo(Survey::class);
    }    
    public function question() {
      return $this->belongsTo(Question::class);
    }}

控制器

//fetching and grouping same answers for particular question
$get_responses = DB::table('answer')
                   ->groupBy('question_id','answer')
                   ->select('answer', DB::raw('COUNT(answer) as selected'))
                   ->pluck('selected', 'answer')
    return view('answer.chart', compact('get_responses'));

查看

 <div class="row">
            @foreach($surveys->questions as $question)
            <div class="col-md-6 col-sm-12">
              <div class="card">
                <div class="card-header">
                  <h4 class="card-title">{{$question->title}}</h4>
                   </div>
                </div>
                <div class="card-content collapse show">
                  <div class="card-body">

                   @foreach($get_responses as $response)

                    <p>{{$response}}</p>


                   @endforeach


                  </div>
                </div>


            @endforeach

0 个答案:

没有答案