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

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


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';

}


慕斯王
浏览 120回答 1
1回答

Smart猫小萌

错误您的错误来自于 foreach 循环中的变量$post已作为非对象返回。可能的原因这$posts不是作为集合返回,而是作为查询构建器实例返回$posts = $tag->posts();Tag如果您在模型和模型之间建立了雄辩的关系Post,当您将其作为方法(即$tag->posts())访问时,您将获得一个雄辩的查询构建器实例。如果您将其作为属性访问(即$tag->posts),它将返回一个雄辩的集合。建议尝试将帖子作为集合传递到视图public function index(Tag $tag) {&nbsp; &nbsp; return view('blogs.blogs', [&nbsp; &nbsp; &nbsp; &nbsp; 'posts' => $tag->posts&nbsp; &nbsp; ]);}并尝试使用@forelse循环来捕获没有帖子的实例@forelse ($posts as $post)@empty@endforelse
打开App,查看更多内容
随时随地看视频慕课网APP