0
我一直在努力弄清楚過去兩天的表關係,我敢肯定,解決方案很簡單,但它暗指我。棘手的雄辯查詢
四個表/模型都參與(包括數據透視表):
Skill
- 技能表。 ASkill
屬於SkillGroup
並屬於許多Candidates
(candidate_skill數據透視表)Candidate
- 候選人表。包含候選人的個人信息,與問題無關。SkillGroup
- skill_groups表。每個技能組都有很多技能。
我希望能夠檢索由SkillGroup
分組的Candidate
擁有的技能對象。例如:
[
{
"id": 1,
"title": "Information Technology (Skill Group)",
"slug": "information-technology",
"created_at": "2016-05-07 23:58:23",
"updated_at": "2016-05-07 23:58:23",
"skills": [
{
"id": 1,
"title": "Web Development (Skill)",
"slug": "web-development",
"description": "Web developers primarily focus on the back-end of websites",
"created_at": "2016-05-07 23:58:55",
"updated_at": "2016-05-07 23:58:55",
"skill_group_id": 1,
"candidates": [
{
"first_name": "John (Candidate)",
"last_name": "Smith",
"pivot": {
"skill_id": 1,
"candidate_id": 6
}
}
]
}
]
}
]
這是很容易用下面的代碼來完成,但我只想檢索結果(SkillGroup
- >Skills
- >Candidate
)爲特定候選人。
\App\SkillGroup::with('skills.candidates')->get();
我曾嘗試以下(和其他一切我能想到的),在candidate_id似乎不影響查詢 - 我看不是由給定的候選人擁有的技能。
\App\SkillGroup::with(['skills.candidates' => function($query) {
$query->whereCandidateId(6);
}])->get();
任何幫助將不勝感激,謝謝!
編輯
感謝@GiedriusKiršys,我能想出如下:
\App\SkillGroup::with(['skills.candidates' => function($query) {
$query->wherePivot('candidate_id', 8)->addSelect('candidates.id', 'first_name', 'last_name');
}])->whereHas('skills.candidates', function($q) {
$q->whereCandidateId(8);
})->get();
這僅檢索SkillGroup
結果與Skill
s的給定ID的Candidate
。