Php 具有多个嵌套Where from数组的雄辩Where Has

Php 具有多个嵌套Where from数组的雄辩Where Has,php,laravel,eloquent,Php,Laravel,Eloquent,我有一个包含表格的数据库:问题、答案、回答和受访者。问题有答案,答案有答案,答案归受访者所有(受访者可以有很多答案) 我试图通过关注所有对问题的回答,通过选择某个问题的特定答案的受访者来进行关联。那么,回答他们是18-20岁的人还回答了什么呢 诀窍是,我想在多个受访者和多个答案之间进行此操作。例如,18-20岁,喜欢绿色的人还喜欢什么 我目前的工作方式是“或”,我添加的每个额外答案都会吸引选择以下两个答案之一的受访者: $cFilters = array() of answer_ids; $re

我有一个包含表格的数据库:问题、答案、回答和受访者。问题有答案,答案有答案,答案归受访者所有(受访者可以有很多答案)

我试图通过关注所有对问题的回答,通过选择某个问题的特定答案的受访者来进行关联。那么,回答他们是18-20岁的人还回答了什么呢

诀窍是,我想在多个受访者和多个答案之间进行此操作。例如,18-20岁,喜欢绿色的人还喜欢什么

我目前的工作方式是“或”,我添加的每个额外答案都会吸引选择以下两个答案之一的受访者:

$cFilters = array() of answer_ids;
$respondents = Auth::user()->account->respondents()
                ->whereHas('responses', function($q) use($cFilters) {
                    $q->whereIn('responses.answer_id', $cFilters);
                })->get();
我最终希望让他们以“和”的方式工作,在另一个答案id中添加显示只有选择了答案id标识的两个答案的受访者不能完全理解该答案。以下是我到目前为止所做的尝试,虽然没有出现错误,但似乎也无法正常工作:

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

我不得不求助于原始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) );
$query='从应答者中选择*
其中id在(';
$i=1;
foreach($cFilters as$answer\u id){
$query=$query。'从应答中选择应答者的应答id,应答者的应答id='。$ANSWERT\U id;
如果($i
我不得不求助于原始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) );
$query='从应答者中选择*
其中id在(';
$i=1;
foreach($cFilters as$answer\u id){
$query=$query。'从应答中选择应答者的应答id,应答者的应答id='。$ANSWERT\U id;
如果($i