雄辩的地方有数组的几个嵌套的Wheres

时间:2015-08-13 23:00:29

标签: php laravel eloquent

我有一个包含表格的数据库:问题,答案,回复和受访者。问题有答案,答案由答辩人拥有(答复者可以有很多答复)。

我试图通过将所有对问题的回答归结为通过选择某个问题答案的受访者来解决相关问题。那么,回答他们18-20岁的人还有什么回答。

诀窍是我想在多个受访者和多个答案中做到这一点。例如,18-20岁的人还有什么样的,像绿色一样:

我目前以“或”的方式工作,每增加一个answer_id,我就会选择两个答案中的任何一个的答案:

ROLE

我最终希望让他们以“和”的方式工作,其中另外一个answer_id只显示已经选择了answer_ids确定的答案的受访者,但是不能完全找出答案。以下是我到目前为止所尝试的不会引发错误但也似乎无法正常工作的内容:

$cFilters = array() of answer_ids;
$respondents = Auth::user()->account->respondents()
                ->whereHas('responses', function($q) use($cFilters) {
                    $q->whereIn('responses.answer_id', $cFilters);
                })->get();

1 个答案:

答案 0 :(得分:0)

我不得不诉诸原始SQL,但它确实有效:

$query = 'SELECT * FROM respondents 
                WHERE id IN ( ';  

        $i = 1;
        foreach($cFilters as $answer_id) {
            $query = $query . 'SELECT respondent_id FROM responses WHERE answer_id=' . $answer_id;
            if($i < count($cFilters)) {
                $query = $query . ') AND id IN (';
            } 
            $i++;
        }
        $query = $query . ')';

        $respondents = DB::select( DB::raw($query) );