为了账号安全,请及时绑定邮箱和手机立即绑定

尝试获取非对象的属性“cover_image”

尝试获取非对象的属性“cover_image”

PHP
慕斯王 2023-07-07 10:48:17
所以我正在制作一个博客网站并实施标签。我不断收到标题中的错误,并且不确定我应该做什么。我在这里查看了类似的问题,但它们看起来与我的做法不同。我使用数据透视表作为标签。当我只对帖子进行操作时,它运行良好,并显示这里的所有内容是我的帖子控制器的索引方法。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


查看完整回答
反对 回复 2023-07-07
  • 1 回答
  • 0 关注
  • 115 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信