Я изо всех сил пытался выяснить связь таблицы за последние два дня, я уверен, что решение прост, но это намекает на меня.Tricky Eloquent query
Четыре таблицы/модели участвуют (в том числе сводной таблицы):
Skill
- таблица навыков. ASkill
принадлежит кSkillGroup
и принадлежит ко всемCandidates
(official_skill pivot table)Candidate
- таблица кандидатов. Содержит личную информацию о кандидате, которая не связана с проблемой.SkillGroup
- таблица skill_groups. У каждой группы навыков есть много Навыков.
Я хочу, чтобы иметь возможность получить навык объекты одержим Candidate
сгруппированных по SkillGroup
. Например:
[
{
"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();
Любая помощь была бы принята с благодарностью, спасибо!
EDIT
Благодаря @Giedrius Kirš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
с с Candidate
с заданным идентификатором.