2016-02-28 125 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();