雄辩的ORM(laravel):从两个与数据透视表

时间:2016-02-28 11:02:21

标签: php laravel orm laravel-5 eloquent

我的数据库中有树表(帖子标签Post_tag(数据透视表)):

  1. 帖子(ID,内容,标题,...)
  2. 标签(ID,TAG_NAME)
  3. post_tag(ID,POST_ID,TAG_ID)
  4. 现在我的问题是如何选择具有相同标签的所有帖子,例如:选择与帖子1具有相似标签的所有帖子。 我创建了帖子和标签表之间的关系: 在帖子表中:

        public function tags(){
        return $this->belongsToMany('App\Tag');}
    

    在标签表中:

        public function posts(){
        return $this->belongsToMany('App\Post');}
    

    我尝试了什么:

        public function similar_tags($id)
        {
            $post = \App\Post::find($id);
            $all_posts = \App\Post::where('id','<>',$id)->where('catg_id','=',$post->catg_id);
            $result=array();
            if(count($post->tags)){
                foreach ($post->tags as $tag) {
                    $all_posts = \App\Post::with('tags')->where('id','=',$id)->get();
                    foreach ($all_posts as $post) {
                        $result[]=$post->post_id;
                    }
                }
                return view('home',compact('result'));
    ;
            }else{
                $fa=0;
                return view('home',compact('fa'));
            }
        }
    

1 个答案:

答案 0 :(得分:0)

这样的事情:

  $posts = Post::whereHas('tags', function($q) use ($tags)
{
    $q->whereIn('id', $tags);//get $tags first .
})->get();