返回来自分层belongsToMany关系的所有数据Laravel 5.3

问题描述:

我有Netflix-esque(层次感)的模型。作为一个例子,我有一门属于ToMany集合的属于ToMany集合的课程,属于ToMany集团,属于ToMany集团。课程是最低级别,最高级别为Group。沿着连锁店,每个人都属于下一个链接的许多部分。返回来自分层belongsToMany关系的所有数据Laravel 5.3

我正在使用一个过滤器按钮,将从Wordpress调用我的Laravel API。当我传递组ID和子组ID时,我需要能够返回属于该子组的集合。但我需要的是这样的:

$group->with('subgroups')->where('subgroup_id')->with('collections')->with('courses')->with('lessons'); 

但是,那种语法不起作用。有没有办法查询每个级别,并获得该级别的关系?

如果需要更多代码,我很乐意分享更多。

+0

什么是你期望的输出?只是'集合'?还是完整的层次结构? – fubar

+0

你的例子中'$ group'是什么? – fubar

+0

@fubar,我的预期输出将是每个集合对象与它的一系列课程。在每个课程对象中,都会有与之相关的一系列课程。 $ group只是指从我的路线传递的Group :: find($ id)的变量 – ryanpback

以下是未经测试的,但应该希望能立即工作,或给你一个关于如何自己解决问题的想法。

有几点:

  1. 您可以在with调用内链关系。例如。 courses.lessons将获得全部courses及相关lessons找到的collections
  2. whereHas允许您查询关系。在此示例中,我正在查找所有集合,其子集与传递的子组ID相匹配,并且还具有与传递的组ID相匹配的组。

例子:

$groupId = 123; 
$subgroupId = 456; 

$collections = Collection::with('courses.lessons') 
    ->whereHas('subgroup', function ($query) ($groupId, $subgroupId) { 
     return $query->whereHas('group', function ($query) use ($groupId) { 
       return $query->where('id', $groupId); 
      }) 
      ->where('id', $subgroupId); 
    }) 
    ->get(); 
+0

非常感谢您的帮助!我标明这个答案是正确的。它花了一点时间玩,但我确实得到了它。 这是我用来使它工作的代码。 ('subgroups',函数($ query)使用($ subgroupId,$ groupId){ return $ query-> whereHas('groups')返回$ query-> where('groups.lessons') - > whereHas ,函数($ query)use($ groupId){ return $ query-> where('group_id',$ groupId); }) - > where('subgroup_id',$ subgroupId); }) - > get ); – ryanpback