所以我正在制作一个博客网站,我正在实现标签。我总是在标题上搞错了,不知道该怎么做。我在这里看过类似的问题,但它们看上去与我所做的不同。我用枢轴表作为标签。当我只使用posts时,它工作得很好,并显示了这里的所有内容,这是来自posts控制器的index方法。
public function index()
{
$posts = Post::all()->sortByDesc('created_at');
return view('blogs.blogs', compact('posts'));
}下面是我的标记控制器中的index方法。
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';
}发布于 2020-07-01 08:31:40
误差
您的错误来自一个事实,即您的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
@endforelsehttps://stackoverflow.com/questions/62672449
复制相似问题