【问题标题】:how to retrive posts where their category is same with current post in laravel?如何在laravel中检索其类别与当前帖子相同的帖子?
【发布时间】:2021-03-15 05:40:32
【问题描述】:

我有帖子和类别的多对多关系,帖子和类别模型定义正确,我有数据透视表但没有数据透视表模型。

当我收到一篇帖子时,我有帖子类别,$post->categories。 我想列出当前帖子类别的所有帖子,例如,如果当前帖子的类别为 A 和 B,我想检索所有类别为 A 和 B 的帖子。 为此目的,laravel elequent 中最好和最简单的方法是什么?

如果有帮助,这里是我的模型

class Post extends Model
{
  public function categories(){
    return $this->belongsToMany(Category::class);
}
}

class Category extends Model
{
  public function posts(){
    return $this->belongsToMany(Posts::class);
}
}

 public function singlePost(Post $post){

    $postsWithSameCategory = ???
   
    return view('home.post',compact('post'));

}

【问题讨论】:

    标签: laravel eloquent laravel-5.8


    【解决方案1】:

    如果您想要具有相同类别的帖子
    从您的示例中;将返回类别为 A、B、A/B、A/B/C 的帖子

     public function singlePost(Post $post){
    
        $postsWithSameCategory = Post::whereHas('categories', function($query) use ($post) {
            $query->whereIn('id', $post->categories->pluck('id'));
        })->get();
       
        return view('home.post',compact('post', 'postsWithSameCategory'));
    }
    

    如果您想要具有完全相同类别的帖子
    从您的示例中;只有 A/B 类别的帖子才会被退回

     public function singlePost(Post $post){
    
        $postsWithSameCategory = Post::whereHas('categories', function($query) use ($post) {
            $query->whereIn('id', $post->categories->pluck('id'));
        }, '=', $post->categories->count())->get();
       
        return view('home.post',compact('post', 'postsWithSameCategory'));
    }
    

    要回答您的评论,您可以定义 scope 您的 Post 模型

    
    public function scopeWhereIsRelatedWithPost($query, $post)
    {
        return $query->whereHas(/** ... **/);
    }
    
    
    $posts = Post::whereIsRelatedWithPost($post)->get();
    

    【讨论】:

    • 比你,都工作了,但我不明白,无论如何。有什么方法可以更轻松地达到这个目的,例如像这样,$post->categories->posts
    • 我已经用一种比重复查询更容易获取帖子的方式更新了答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-10
    • 1970-01-01
    • 1970-01-01
    • 2018-12-15
    • 1970-01-01
    • 1970-01-01
    • 2019-02-17
    相关资源
    最近更新 更多