2014-07-05 179 views
0

我有3個表格:post,tag,tag_post。從laravel中的數據透視表中獲取數據

我將帖子中的post_id保存到/ tag_id中,並將它們都保存在tag_post中。

我該如何顯示每個帖子的標籤?我怎樣才能從tag_post表中選擇數據?

這是我的Post模型:

public function tag() 
     { 
      return $this->belongsToMany('Tag','tag_post'); 
     } 

,它是我的標籤型號:

public function post() 
     { 
      return $this->belongsToMany('Post','tag_post'); 
     } 

,這是我的控制器:

$posts=Post::orderBy('id','DESC')->paginate(5); 
///but I dont know how can i show each post's tags under it 

感謝您的時間。

回答

1

有幾件事情在這裏(我會保持它的簡單,所以沒有ORDERBY或其他任何東西,我也認爲你重命名關係到複數:tags()posts(),使其更容易閱讀和工作):

$posts = Post::paginate(5); // returns a Collection of Post models, 1 db query 

foreach ($posts as $post) { 
    $post->tags; // Collection of Tag models, fetched from db for each $post 
} 

這意味着5 + 1個查詢。它不適合所有的過程,所以我們需要http://laravel.com/docs/eloquent#eager-loading

這讓我們想到:

$posts = Post::with('tags')->paginate(5); // returns a Collection of Post models 
// runs 1 query for posts and 1 query for all the tags 

foreach ($posts as $post) { 
    $post->tags; // Collection of Tag models, no more db queries 
} 

因此,要列出所有你能做到這一點的標籤:

@foreach ($posts as $post) 
    <tr> 
    <td>{{ $post->title }}</td> 
    <td> 
     @foreach ($post->tags as $tag) 
      {{ $tag->name }} // or whatever it is that you want to print of the tag 
     @endforeach 
    </td> 
    </tr> 
@endforeach 
1

如果您需要從每個post獲得tags,您需要一個foreach循環。

foreach ($posts as $post) 
{ 
    var_dump($post->tags); // your individual post's tags will be here 
} 

此外,儘管我不喜歡捅鼻涕,但如果遵循框架中的約定,它會更好。 (即使用複數在許多一對多的關係形成)

郵政型號

public function tags() // <-- note the plurals 
{ 
    $this->belongsToMany('Tag', 'tag_post'); 
} 

標籤型號

public function posts() // <-- note the plurals 
{ 
    $this->belongsToMany('Post', 'tag_post'); 
} 

如果您需要從tag_post表中獲取數據,查看使用數據透視表的文檔。

http://laravel.com/docs/eloquent#working-with-pivot-tables

+0

謝謝回覆。請檢查http://laravel.io/bin/6E0Rq – saha

+0

您可以試試這個'$ p-> tag() - > get('name')' – Oni

相關問題