在laravel中,我从我的查询中获取文章列表,之后我将获得这些文章的所有图像文件和视频的评论和路径。我的目标是创建一个看起来像这样的json对象数组:
[{
id: id,
title: title,
summary: summary,
comments: 'commentsCount',
images: {
path: 'path',
path: 'path',
path: 'path',
}
},
...
]
不确定如何组合并制作这种数组,这是我失败的尝试:
$result = Article::where('publish', 1)->orderBy('created_at', 'desc')->paginate(15);
$articles = [];
foreach($result as $article){
$articles[] = $article;
$articles[]['comments'] = $article->comments()->count();
foreach ($article->medias as $media){
$articles[]['comments']['images'] = $media->path;
}
}
更新的代码:
这是给我想要结果的最简单的解决方案:
$result = Article::where('publish', 1)->orderBy('created_at', 'desc')->paginate(15);
foreach($result as $article){
$articles[$article->id] = $article;
$articles[$article->id]['comments'] = $article->comments()->count();
$articles[$article->id]['medias'] = $article->medias()->get();
}
return $articles;
答案 0 :(得分:0)
我怀疑您的问题与您使用[]
:
foreach($result as $article){
$articles[] = $article;
$articles[]['comments'] = $article->comments()->count();
foreach ($article->medias as $media){
$articles[]['comments']['images'] = $media->path;
}
}
每次你写$articles[] ... = ...
时,你都会在数组的末尾附加一个全新的元素。
如果你想追加一个元素,然后附加子元素,你需要一个不同的方法:
在括号内指定一个索引(您可以将其作为变量)。
首先将元素组合成一个临时变量,在循环迭代结束时将其追加一次。