Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Laravel返回分组多对多关系_Laravel - Fatal编程技术网

Laravel返回分组多对多关系

Laravel返回分组多对多关系,laravel,Laravel,在这种情况下,如何返回多个关系中的分组数据集集合 下面是我想要返回的数据集的示例 因此,让我们将收藏夹作为流派,突出显示的日期是流派名称,它也是一个集合。我想根据该集合中的流派名称对其进行分组 我的模型: 录像带 体裁 我已经试过下面的方法了,但似乎没有成功 ``` $videos = Video::with('genres')->all(); $collection = $videos->groupBy('genres.name'); ``` 我想按流派名称对数据集进行分组,因

在这种情况下,如何返回多个关系中的分组数据集集合

下面是我想要返回的数据集的示例

因此,让我们将收藏夹作为流派,突出显示的日期是
流派名称
,它也是一个集合。我想根据该集合中的
流派名称对其进行分组

我的模型:

录像带

体裁

我已经试过下面的方法了,但似乎没有成功

```
$videos = Video::with('genres')->all();
$collection = $videos->groupBy('genres.name');
```

我想按流派名称对数据集进行分组,因为我知道流派的关系也是流派的集合。

集合和查询生成器共享许多类似的函数,如where()groupBy()等。这是很好的语法糖,但它确实掩盖了底层技术

  • 如果您调用$model->videos。。。与属性一样,这是一个集合(查询已执行)
  • 如果调用$model->videos()。。。与方法类似,这是一个查询生成器
  • 因此,如果您想在sql中完成这项工作,可以执行以下操作

    $video_query_builder = Video::with('genere');
    $video_query_builder->groupBy('genere_id');
    $result = $video_query_builder->get();
    
    你可以像评论中所建议的那样,把它整齐地链接在一起。。。像这样:

    $result = Video::with('genere')
                   ->groupBy('genere_id')
                   ->get();
    

    嘿,$collection从何而来?哦,对不起,我是想将返回的数据集分配到collection变量中。您可能希望使用
    Video::with('genres')->all()加载流派也是啊!我已经加载了数据集,我想将返回的数据集分组为以下格式:“Blues”:[{“name”:“Blues”},{“name”:“Blues”},],“Hip Hop”:[{“name”:“Blues”}]您可以在查询中添加一个:
    $genres=Genre::has('videos')->with('videos')->get()
    ('genre')->groupBy('genre_id')->get()
    。不确定它是否有效,只是想提一下,没有理由使用3行。@devk完全正确。您可以将其链接在一起。我的长篇大论只是为了清晰起见。这不起作用,因为视频表上没有流派id,这是使用透视表的多对多关系。一个视频可以有多个流派或a一个。或者,也许你想用视频获得所有代?从另一个方向开始?如果你使用一个集合,那么最简单的方法就是在你的视频模型中添加一个流派slug maker。然后你可以根据它进行分组。在video.php模型类中添加类似的内容。公共函数getGenreSlugAttribute(){return Inpode('-',$this->genres->pulk('name')->flatte()->toArray();}然后你可以使用('genre')->get()->groupBy('quare_slug');
    $video_query_builder = Video::with('genere');
    $video_query_builder->groupBy('genere_id');
    $result = $video_query_builder->get();
    
    $result = Video::with('genere')
                   ->groupBy('genere_id')
                   ->get();