首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >试图获取非对象的属性“cover_image”(视图:cover_image)

试图获取非对象的属性“cover_image”(视图:cover_image)
EN

Stack Overflow用户
提问于 2020-07-01 08:12:39
回答 1查看 114关注 0票数 1

所以我正在制作一个博客网站,我正在实现标签。我总是在标题上搞错了,不知道该怎么做。我在这里看过类似的问题,但它们看上去与我所做的不同。我用枢轴表作为标签。当我只使用posts时,它工作得很好,并显示了这里的所有内容,这是来自posts控制器的index方法。

代码语言:javascript
复制
public function index()
{
   $posts = Post::all()->sortByDesc('created_at');
   return view('blogs.blogs', compact('posts'));
}

下面是我的标记控制器中的index方法。

代码语言:javascript
复制
public function index(Tag $tag){
    $posts = $tag->posts();
    return view('blogs.blogs')->with('posts',$posts);
}

下面是我把它输出到视图中的方式

代码语言:javascript
复制
@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

这是我的标签模型

代码语言:javascript
复制
public function posts() {
    return $this->belongsToMany(Post::class);
}

public function getRouteKeyName()
{
    return 'name';
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-01 08:31:40

误差

您的错误来自一个事实,即您的foreach循环中的变量$post已作为非对象返回。

可能导致

$posts不是作为集合返回的,而是作为查询构建器实例返回的。

代码语言:javascript
复制
$posts = $tag->posts();

如果您已经在Tag模型和Post模型之间建立了雄辩的关系,那么当您以方法(即$tag->posts())的形式访问它时,您将得到一个出色的查询生成器实例。如果您将它作为属性(即$tag->posts)访问,它将返回一个雄辩的集合。

建议

尝试将帖子作为集合传递给视图。

代码语言:javascript
复制
public function index(Tag $tag) {
    return view('blogs.blogs', [
        'posts' => $tag->posts
    ]);
}

并尝试使用@forelse循环来捕获没有帖子的实例

代码语言:javascript
复制
@forelse ($posts as $post)

@empty

@endforelse
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62672449

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档