Laravel 合并两个雄辩的集合

Laravel 合并两个雄辩的集合,laravel,collections,eloquent,Laravel,Collections,Eloquent,我设置了一个调查表,每个调查都有一些与自身相关的答案(一对多)。我想做一个查询,分别统计参数1=0和参数1=1的每个调查ID的答案数 我试着这样做: $surveysWithRepliesExposed = Survey::where('title', 'LIKE', "%$name%") ->with(array('surveyAnswerSets' => function($query){ $query->where('parameter1', 0)

我设置了一个调查表,每个调查都有一些与自身相关的答案(一对多)。我想做一个查询,分别统计参数1=0和参数1=1的每个调查ID的答案数

我试着这样做:

$surveysWithRepliesExposed = Survey::where('title', 'LIKE', "%$name%")
    ->with(array('surveyAnswerSets' => function($query){
        $query->where('parameter1', 0)
        ->selectRaw('surveyId, count(*) as repliesExposed')
        ->groupBy('surveyId');
    }))
    ->select($columns);

$surveysWithRepliesExposed = Survey::where('title', 'LIKE', "%$name%")
    ->with(array('surveyAnswerSets' => function($query){
        $query->where('parameter1', 1)
        ->selectRaw('surveyId, count(*) as repliesControl')
        ->groupBy('surveyId');
    }))
    ->select($columns);
但现在我有两个看起来几乎一样的系列:

{
    "surveyId": 11,
    "title": "A survey",
    "startDate": "2015-04-16",
    "endDate": "2015-04-30",
    "survey_answer_sets": [
        {
            "surveyId": 11,
            "repliesExposed": 212
        }
    ]
}
另一个呢

{
    "surveyId": 11,
    "title": "A survey",
    "startDate": "2015-04-16",
    "endDate": "2015-04-30",
    "survey_answer_sets": [
        {
            "surveyId": 11,
            "repliesControl": 56
        }
    ]
}
我如何合并这些,以便

{
    "surveyId": 11,
    "title": "A survey",
    "startDate": "2015-04-16",
    "endDate": "2015-04-30",
    "survey_answer_sets": [
        {
            "surveyId": 11,
            "repliesExposed": 212
            "repliesControl": 56
        }
    ]
}

我在朋友的帮助下解决了这个问题

这个代码符合我的要求

$surveys = Survey::leftJoin('SurveyAnswerSets', 'Surveys.surveyId', '=', 'SurveyAnswerSets.surveyId')
    ->select(
        DB::raw(
            "Surveys.surveyId,
           Surveys.title,
           Surveys.startDate,
           Surveys.endDate,
           sum(case when SurveyAnswerSets.isRefGroup = 0 then 1 else 0 end) repliesExposed,
           sum(case when SurveyAnswerSets.isRefGroup = 1 then 1 else 0 end) repliesControl,
           sum(1) repliesTotal"
        )
    )
    ->where('SurveyAnswerSets.isComplete', 1)
    ->where('Surveys.title', 'LIKE', "%$name%")
    ->where('Surveys.isTemplate', 0)
    ->groupBy('Surveys.surveyId')->get();