Laravel 通过关系 id 收集数据

在我的应用程序中,我有一个帖子表、类别表和 category_post 表,因为帖子和类别具有多对多关系。

我想获取所有帖子及其附加类别,但也将它们分组在一起,因为在我的前端我想循环一个对象并显示这样的列表,

  • 烹饪

    • 职位编号 1

    • 帖子编号 3

    • 职位编号 4

  • 音乐

    • 职位编号 2

    • 帖子编号 5

  • 语言

    • 邮政编号 6

    • 邮政编号 7

我知道在我的控制器中我可以做到这一点,

$posts = Post::with('categories')->get();

但是我不知道如何对关系属性进行分组,或者我是否可以以可以循环遍历它以形成下面的列表的方式来构造返回的数据。


慕无忌1623718
浏览 97回答 3
3回答

胡说叔叔

您可以从数据库中获取数据,然后按照您想要的方式对它们进行分组:$posts = Post::with('categories')->get();$result = $posts->groupBy([    'categories',    function ($item) {        return $item['category_name'];    },], $preserveKeys = true);有关按关系字段分组的更多详细信息:https://laravel.com/docs/7.x/collections#method-groupby

慕斯709654

根据给定的表:posts 和 categories 表是主表,category_post 表是一个数据透视表,其中包含 posts 和 categories 表之间的关系:所以,你的关系应该是 posts->category_post->categories$posts = Posts::with('category_post')->get();$grouped = $posts->groupBy('category_post.category_id');category_post 还与类别数据的类别表相关。

人到中年有点甜

belongsToMany在类别模型中,您可以像下面这样设置和关系function posts(){   return $this->beongsToMany(Post::class, 'category_post', 'category_id', 'post_id');}
打开App,查看更多内容
随时随地看视频慕课网APP