【问题标题】:laravel get a list of posts, with their tags, and commentslaravel 获取帖子列表,包括他们的标签和评论
【发布时间】:2019-12-21 03:26:06
【问题描述】:

答案如下。

我正在尝试获取一个包含 10 个帖子的列表,并添加每个帖子的标签和 cmets(这将因帖子而异)我在下面有一个我想要实现的示例。

基本上,我是以此作为开始的。 https://laravel.com/docs/5.8/eloquent-relationships#many-to-many

但是它不太好用。它是逐字设置的,我已经按照描述设置了数据透视表。要么我可以得到所有帖子,但是通过 1 个标签,或者 1 个带有所有标签的帖子。即

"post_title": "Post 1 ",
    "tags": [
            {
                "tag_name": "Tag 1"
            },{
                "tag_name": "Tag 2"
            },... 

我也尝试过使用join方法,但最终出现这种情况。

 [{ 
    "post_title": "Post 1 ", <--- post 1
    "tag_name": "Tag 1"
  },
  {
    "post_title": "Post 1 ", <--- Also post 1
    "tag_name": "Tag 2"
  },
  {
    "post_title": "Post 3 ",
    "tag_name": "Tag 2"
  },
  {
    "post_title": "Post 4 ",
    "tag_name": "Tag 1"
  }]

如您所见,前 2 个帖子名称重复。我应该在帖子 1 中添加两个标签。

我似乎能够实现这一点的方法是加入所有内容,然后修改和分组元素,或者更糟糕的是获取最新的 10 个帖子,然后将帖子 ID 提取到一个数组中。 然后使用这些帖子 ID,获取帖子 ID 匹配的所有类别, 然后重复 cmets。然后把它拉在一起。这看起来超级笨重。

这很奇怪,因为它似乎应该在 google 中无处不在。如果是,对不起。

我必须有一个简单的 Laravel 解决方案才能获得下面的结构。问题是,使用 Eloquent 还是数据库部分的连接查询来解决这个问题更好?

[{ 
    "post_title": "Post 1 ", 
    "cat": [
        {
          'catname': "Tag 1"
        },
        {
          'catname': "Tag 2"
        },
    ],
    "comment": [
        {
            'comment': "Here be a comment"
        },
        {
            'comment': "Here is one two"
        },
    ],
},
{ 
    "post_title": "Post 2 ", 
    "cat": [
        {
        'catname': "Tag 1"
        }
    ],
    "comment": [],
}
...
]

回答 要解决此问题,请使用 Eager loading https://laravel.com/docs/5.8/eloquent-relationships#eager-loading

谢谢蒂姆·刘易斯和亚历克·乔伊!

【问题讨论】:

  • 显示你的输出结构很好,但通常它有助于包含生成输出的代码,如Post::with('tags') ...Tag::with('post') ...等。这样,我们可以帮助调试如何你得到了输出与你想要的输出。
  • 你是否已经尝试过 Post::with(['tags, cmets'])->get();
  • 哇,多么简单,包括我!这就是它的完成方式。我希望我能给你们两个 100 分。

标签: php laravel eloquent


【解决方案1】:

要解决这个问题,请使用Eager loading

(发布为社区 wiki 答案,因为提问者已回答此问题)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-24
    • 2012-04-27
    • 2017-03-03
    • 2021-03-03
    • 2018-08-16
    • 1970-01-01
    相关资源
    最近更新 更多