2016-02-28 38 views
1

相关的我在我的数据库树表(帖子标签Post_tag(透视表))两个表中进行选择:雄辩的ORM(laravel):从数据透视表

  1. 帖子(编号,内容,标题,.. 。)
  2. 标签(ID,TAG_NAME)
  3. post_tag(ID,POST_ID,TAG_ID)

现在我的问题是关于我如何选择具有相同标签的岗位,例如所有帖子:选择所有与帖子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')); 
     } 
    } 
+0

你的意思是“获取多个标签的帖子”? – Drudge

+0

@Drudge获得具有相同标签不必要的帖子所有标签你是否得到它? –

+0

是的,但你可以发布你试过的代码? – Drudge

回答

0

像这样的东西:

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