返回来自分层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');
但是,那种语法不起作用。有没有办法查询每个级别,并获得该级别的关系?
如果需要更多代码,我很乐意分享更多。
以下是未经测试的,但应该希望能立即工作,或给你一个关于如何自己解决问题的想法。
有几点:
- 您可以在
with
调用内链关系。例如。courses.lessons
将获得全部courses
及相关lessons
找到的collections
。 -
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();
非常感谢您的帮助!我标明这个答案是正确的。它花了一点时间玩,但我确实得到了它。 这是我用来使它工作的代码。 ('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
什么是你期望的输出?只是'集合'?还是完整的层次结构? – fubar
你的例子中'$ group'是什么? – fubar
@fubar,我的预期输出将是每个集合对象与它的一系列课程。在每个课程对象中,都会有与之相关的一系列课程。 $ group只是指从我的路线传递的Group :: find($ id)的变量 – ryanpback