答案如下。
我正在尝试获取一个包含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
谢谢蒂姆·刘易斯和亚历克·乔伊!