所以我正在制作一个博客网站并实施标签。我不断收到标题中的错误,并且不确定我应该做什么。我在这里查看了类似的问题,但它们看起来与我的做法不同。我使用数据透视表作为标签。当我只对帖子进行操作时,它运行良好,并显示这里的所有内容是我的帖子控制器的索引方法。public function index(){ $posts = Post::all()->sortByDesc('created_at'); return view('blogs.blogs', compact('posts'));}这是我的标签控制器的索引方法。public function index(Tag $tag){ $posts = $tag->posts(); return view('blogs.blogs')->with('posts',$posts);}这是我在视图中输出它的方式@foreach($posts as $post) <div class="well row"> <div class="col-md-4"> <img style="width: 100%" src="/storage/cover_images/{{$post->cover_image}}" alt=""> </div> <div class="col-md-8"> <h3> <a href="/posts/{{$post->id}}">{{$post->title}}</a></h3> <h3>{{$post->created_at}}</h3> </div> </div>@endforeach这是我的标签模型public function posts() { return $this->belongsToMany(Post::class);}public function getRouteKeyName(){ return 'name';}
1 回答
Smart猫小萌
TA贡献1911条经验 获得超7个赞
错误
您的错误来自于 foreach 循环中的变量$post已作为非对象返回。
可能的原因
这$posts不是作为集合返回,而是作为查询构建器实例返回
$posts = $tag->posts();
Tag如果您在模型和模型之间建立了雄辩的关系Post,当您将其作为方法(即$tag->posts())访问时,您将获得一个雄辩的查询构建器实例。如果您将其作为属性访问(即$tag->posts),它将返回一个雄辩的集合。
建议
尝试将帖子作为集合传递到视图
public function index(Tag $tag) {
return view('blogs.blogs', [
'posts' => $tag->posts
]);
}
并尝试使用@forelse循环来捕获没有帖子的实例
@forelse ($posts as $post)
@empty
@endforelse
- 1 回答
- 0 关注
- 115 浏览
添加回答
举报
0/150
提交
取消