【问题标题】:Return all data from hierarchical belongsToMany relationship Laravel 5.3从分层的belongsToMany关系返回所有数据Laravel 5.3
【发布时间】:2017-09-24 23:25:05
【问题描述】:

我有 Netflix 风格的模型(在层次结构的意义上)。例如,我有一个属于ToMany 的课程,属于ToMany 集合,属于ToMany 子组,属于ToMany 组。课程是最低级别,最高级别为 Group。顺着链条往下走,每一个也属于下一个环节的许多。

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

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

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

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

【问题讨论】:

  • 您的预期输出是什么?只是collections?还是完整的层次结构?
  • 在你的例子中$group 是什么?
  • @fubar,我的预期输出将是每个集合对象及其课程数组。在每个课程对象中,都会有与其相关联的课程数组。 $group 只是指从我的路由传递的 Group::find($id) 变量

标签: php mysql laravel api relationships


【解决方案1】:

以下内容未经测试,但希望可以立即生效,或者让您了解如何自己解决问题。

几点:

  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();

【讨论】:

  • 非常感谢您的帮助!我将此答案标记为正确。花了一点时间玩,但我确实明白了。这是我用来使它工作的代码。 $collections = Collection::with('courses.lessons') ->whereHas('subgroups', function ($query) use ($subgroupId, $groupId) { return $query->whereHas('groups', function ($查询) 使用 ($groupId) { return $query->where('group_id', $groupId); })->where('subgroup_id', $subgroupId); })->get();
猜你喜欢
  • 2017-06-04
  • 2018-05-19
  • 2014-11-23
  • 1970-01-01
  • 2020-03-04
  • 2018-02-20
  • 2020-06-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多