Laravel Eloquent Query 包含枢轴和关系

Posted

技术标签:

【中文标题】Laravel Eloquent Query 包含枢轴和关系【英文标题】:Laravel Eloquent Query containing pivots and relations 【发布时间】:2022-01-09 17:58:51 【问题描述】:

我想根据从问卷中获得的值制作图表。这是我的数据库的样子(只显示我需要的): 问卷调查

id  
client_id   

questionnaire_answers


id  
questionnaire_id    
questionnaire_question_id   
answer

questionnaire_questions

id  
question

我想要的基本上是从特定客户那里获得问题 1(他们所有的问卷)的所有答案。 这个想法是他们回答一个基于严重程度的问题,所以基本上是 1 - 5。 我在控制器中试过这个:

$questionnaires = JsonResource::collection(
    Questionnaire::where('client_id', '=', 2)
    ->with([
        'clients', 
        'questionnaire_answers', 
        'questionnaire_answers.questionnaire_question', 
        'questionnaire_answers.questionnaire_question.questionnaire_question_type'
    ])
    ->get()
);

dd($questionnaires);

所有关系都有效。

【问题讨论】:

您当前的查询有效吗?如果没有,您是否尝试过删除 JsonResource 部分? $questionnaires = Questionnaire::...get(); 是的,这部分工作正常,我只是需要有人帮助我从那个起点得到我想要的结果,我会尝试我得到的答案:) 【参考方案1】:

我想要的基本上是从特定客户那里获得问题 1(他们所有的问卷)的所有答案。这个想法是他们回答一个基于严重程度的问题,所以基本上是 1 - 5。

我将重做查询,使其从 Question 模型开始。

假设以下关系:

QuestionbelongsToMany Questionnaire(使用Answer作为枢纽模型)
// Question model
public function questionnaires()

    return $this->belongsToMany(Questionnaire::class)
                ->withPivot('answer')
                ->as('answer')
                ->using(Answer::class);

$client_id = ...;

$question = Question::query()
    ->whereHas('questionnaires', function ($questionnaire) use ($client_id) 
        $questionnaire->where('client_id', $client_id);
    )
    ->with([
        'questionnaires' => function ($questionnaire) use ($client_id) 
            $questionnaire->where('client_id', $client_id)
                          ->with('client');
        ,
        'question_type',
    ])
    ->find(1);
foreach ($question->questionnaires as $questionnaire) 
    $questionnaire->client->...        // client attributes
    $question->....                    // question attributes
    $questionnaire->answer->...        // answer attributes.
    $questionnaire->question_type->... // question_type attributes

【讨论】:

我要试试这个,我会告诉你我能做到多远,谢谢你的意见!

以上是关于Laravel Eloquent Query 包含枢轴和关系的主要内容,如果未能解决你的问题,请参考以下文章

Laravel Query:为 Query Builder 实现 Eloquent Scope

Laravel:在“query-builder”或“eloquent”中更改原始查询

laravel 5.1 中 Eloquent 和 Query Builder 有啥区别?

Laravel Eloquent Query - 限制计数()

Laravel Eloquent ORM 的本地作用域

如何使用 Laravel Eloquent 和 Laravel Query Builder 进行联合查询?