3 回答
TA贡献1909条经验 获得超7个赞
您应该建立BlogPost和BlogCategory模型之间的关系,看到您已经category_id在BlogPost模型中有一个字段,即:
在BlogPost型号中:
public function category(){
return $this->belongsTo(\App\BlogCategory::class);
}
在BlogCategory型号中:
public function posts(){
return $this->hasMany(\App\BlogPost::class);
}
接下来,您可以渴望的负载 categories与$posts在你的控制器只有两个疑问:
public function index()
{
$posts = BlogPost::with('category')->orderBy('id', 'desc')->take(14)->get();
return view('blog.index', compact('posts'));
}
然后在您的视图中,您可以$post->category直接访问每个对象,因为在控制器中加载了热切:
@foreach($posts as $post)
@if($loop->iteration > 2)
<div class="col-sm-6 col-md-3 d-flex justify-content-center other-post">
<a href="#">
<img src="#" alt="">
<p class="post-category">{{ $post->category->name }}</p>
<h5 class="post-title">{{ $post->title }}</h5>
</a>
</div>
@endif
@endforeach
TA贡献1844条经验 获得超8个赞
它可以优化,首先,您需要从类别到帖子建立一对多的关系
首先:确保您在帖子迁移category_id列中有
第二:打开类别模型并编写此方法,这将允许您获取属于该类别的帖子
public function posts(){
return $this->hasMany(\App\Post::class);
}
第三:打开店铺模型并编写此方法,这将允许您获取属于帖子的类别
public function catgeory(){
return $this->belongsTo(\App\Category::class);
}
最后:您将像这样编辑您的视图
@foreach($posts as $post)
<div class="col-sm-6 col-md-3 d-flex justify-content-center other-post">
<a href="#">
<img src="#" alt="">
<p class="post-category">{{ $post->category->title }}</p>
<h5 class="post-title">{{ $post->title }}</h5>
</a>
</div>
@endforeach
当然,您不会再在控制器中调用类别
public function index()
{
$post = BlogPost::orderBy('id', 'desc')->take(14)
->with('category')->get();
return view('blog.index', ['posts' => $post]);
}
TA贡献1831条经验 获得超4个赞
此行为$categories->get($post->category_id)
您返回一个数组category
,因此这里的解决方案如下所示:
{{ $categories->get($post->category_id)['name'] }}
- 3 回答
- 0 关注
- 274 浏览
添加回答
举报