如何在 select 中调用带有 DB::raw 的 where 子句

How to call where clause with DB::raw inside select

我有三个名为 test_templates 的表格、部分和问题。每个 test_templates 包含一些部分,每个部分可能有多个 questions.Now 我想显示问题 count.Also 共有三种类型的问题

  1. 多选题
  2. 编码
  3. 投稿

每种类型的单独计数。我尝试了下面的代码,但它给了我完整的计数,而不是每种类型的单独计数

   foreach ($args['listing'] as $value) {
            $args['sections'][$value->id] = Section::leftJoin('questions','sections.id','=','questions.section_id')
            ->select('sections.template_id','sections.section_name','questions.question_type_id',
                DB::raw("(CASE WHEN (questions.question_type_id = 1) THEN count(questions.id) END) as count_1"),DB::raw("(CASE WHEN (questions.question_type_id = 2) THEN count(questions.id) END) as count_2"),DB::raw("(CASE WHEN (questions.question_type_id = 3) THEN count(questions.id) END) as count_3"))
            ->where('sections.template_id','=',$value->id)
            ->groupBy('sections.id')
            ->get();
}

最后整理出上面的问题如:

来自这些表的数据及其代表特定类型的计数在同一查询中找到

foreach ($args['listing'] as $value) {
                $args['sections'][$value->id] = Section::leftJoin('questions','sections.id','=','questions.section_id')
                ->select('sections.*','questions.question_type_id'
                    ,DB::raw('(SELECT count(questions.id) FROM `questions` WHERE `question_type_id` = 1) as mulitple_questions')
                    ,DB::raw('(SELECT count(questions.id) FROM `questions` WHERE `question_type_id` = 2) as coding_questions')
                    ,DB::raw('(SELECT count(questions.id) FROM `questions` WHERE `question_type_id` = 3) as submission_questions'))
                ->where('sections.template_id','=',$value->id)
                ->groupBy('sections.id')
                ->get();
            }