首页 > 解决方案 > Laravel:加入多个选择语句

问题描述

我有一个调查应用程序。每个SurveyResponse都有多个QuestionResponses. 出于报告目的,我想过滤QuestionResponses基于为其他QuestionResponses相同部分回答的值SurveyResponse- 例如。给我所有选择问题的人MaleGender问题回答。

以下示例 SQL 查询正在运行,但我正在努力在 Laravel 中复制它:

SELECT * 
FROM ( SELECT * 
FROM ( SELECT * 
       FROM question_responses ) AS A

JOIN ( SELECT survey_response_id AS JOIN_A
       FROM question_responses
       WHERE (question_short_name = 'Gender') AND (value = 'Male')) AS B
ON A.survey_response_id= JOIN_A) AS C

JOIN ( SELECT survey_response_id AS JOIN_B
       FROM question_responses
       WHERE (question_short_name = 'Age') AND (value = '45 to 54')) AS D
ON C.survey_response_id=JOIN_B

我将如何使用 Eloquent 或 Laravel 的查询构建器来做到这一点?

标签: mysqllaravel

解决方案


您可以使用DB::select方法来检索结果。

use Illuminate\Support\Facades\DB;


$results = DB::select("SELECT * 
FROM ( SELECT * 
FROM ( SELECT * 
   FROM question_responses ) AS A
JOIN ( SELECT survey_response_id AS JOIN_A
   FROM question_responses
   WHERE (question_short_name = ?) AND (value = ?)) AS B
ON A.survey_response_id= JOIN_A) AS C
JOIN ( SELECT survey_response_id AS JOIN_B
   FROM question_responses
   WHERE (question_short_name = ?) AND (value = ?)) AS D
ON C.survey_response_id= JOIN_B", ['Gender', 'Male', 'Age', '45 to 54']);

foreach ($results as $key => $row) {
    print_r($row);
}

推荐阅读