laravel获取帖子列表,包括其标签和评论

时间:2019-12-18 21:13:00

标签: php laravel eloquent

答案如下。

我正在尝试获取一个包含10条帖子的列表,并为每个帖子添加标签和评论(具体取决于该帖子)。下面是我要实现的示例。

基本上,我是以此为起点。 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匹配的所有类别, 然后重复评论。然后将其压缩在一起。这似乎很笨拙。

这很奇怪,因为它似乎应该在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": [],
}
...
]

答案 要解决此问题,请使用急切加载 https://laravel.com/docs/5.8/eloquent-relationships#eager-loading

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

1 个答案:

答案 0 :(得分:0)

要解决此问题,请使用Eager loading

(由于提问者已回答此问题,因此发布为社区Wiki-answer)