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
模型开始。
假设以下关系:
Question
belongsToMany 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 有啥区别?