Php 巧妙的雄辩的询问

Php 巧妙的雄辩的询问,php,mysql,json,laravel,eloquent,Php,Mysql,Json,Laravel,Eloquent,在过去的两天里,我一直在努力找出一个表关系,我相信解决方案很简单,但它暗指的是我 涉及四个表/模型(包括一个数据透视表): 技能-技能表。技能属于技能组,属于许多候选人(候选人技能透视表) 候选者-候选者表。包含候选人的个人信息,与问题无关 技能组-技能组表。每个技能组都有许多技能 我希望能够检索由SkillGroup分组的候选人拥有的技能对象。例如: [ { "id": 1, "title": "Information Technology (Skill Group)",

在过去的两天里,我一直在努力找出一个表关系,我相信解决方案很简单,但它暗指的是我

涉及四个表/模型(包括一个数据透视表):

  • 技能
    -技能表。
    技能
    属于
    技能组
    ,属于许多
    候选人
    (候选人技能透视表)
  • 候选者
    -候选者表。包含候选人的个人信息,与问题无关
  • 技能组
    -技能组表。每个技能组都有许多技能
  • 我希望能够检索由
    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();
    
    \App\SkillGroup::with(['skills.candidates' => function($query) {
                $query->whereCandidateId(6);
            }])->get();
    
    我尝试了以下方法(以及我能想到的所有其他方法),候选人id似乎不会影响查询-我看到了给定候选人不具备的技能

    \App\SkillGroup::with('skills.candidates')->get();
    
    \App\SkillGroup::with(['skills.candidates' => function($query) {
                $query->whereCandidateId(6);
            }])->get();
    
    任何帮助都将不胜感激,谢谢

    编辑

    多亏了@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
    s和具有给定ID的
    Candidate
    的结果。

    您希望按透视表属性查询,但您正在按
    candidates.Candidate\u ID
    属性查询

    您可以这样做:

    \App\SkillGroup::with(['skills.candidates' => function($query) {
         $query->wherePivot('candidate_id', 6);
    }])->get();
    

    您希望按透视表属性进行查询,但您正在按
    候选项。候选项id
    属性进行查询

    您可以这样做:

    \App\SkillGroup::with(['skills.candidates' => function($query) {
         $query->wherePivot('candidate_id', 6);
    }])->get();