2017-04-23 45 views
1

我有以下的foreach循環輸出所有的標籤名稱:Laravel - 文章顯示數量與特定的標籤

<section class="popular-tags-section"> 
    <ul class="popular-tags-listings"> 
     @foreach($tags as $tag) 
      <li><a href="">{{ $tag->tag }}(3)</a></li> 
     @endForEach 
    </ul> 
</section> 

上面的代碼讓我在前臺如下:

tags

現在,而不是現在的靜態數字3,我想顯示具有該給定標記的文章的數量。

所以現在我的數據庫是這樣的blog articles存儲在單獨的表和tags存儲在一個單獨的表。 blog articles表具有名爲tag的列和tags表也具有名爲tag的列。現在,這兩個表都傳遞到視圖中的變量形式:

$recentPost // Contains all the blog articles 
$tag // Contains all the tags 

現在我該怎樣顯示被標記javascript例如文章動態多少?

附加信息

博客文章表:

enter image description here

標籤表:

enter image description here

首頁代碼:

class PagesController extends Controller { 

    public function index() { 
     // Grap the latest post .. the last 10 :) 
     $recentPost = Admin::orderBy('created_at' , 'desc')->take(10)->get(); 
     $tags = Tags::all();; 
     return view('pages.index')->with('recentPost' , $recentPost)->with('tags' , $tags); 
    } 

} 

博客文章莫代爾:

class Admin extends Model { 

    public $table = "admin"; 
    // public $timestamps = false; 
    protected $fillable = [ 
     'title', 
     'description', 
     'keywords', 
     'blog_content', 
     'tag', 
     'slug', 
     'filePath' 
    ]; 

} 

標籤莫代爾:

class Tags extends Model { 
    public $table = "tags"; 
    public $timestamps = false; 
    protected $fillable = ['tag']; 
} 
+0

「博客文章」表中有一個名爲'tag'的列 - 你的意思是'tag_id'吧? – imrealashu

+1

如果您更精確地展示您的模型以及表格結構,那將會很棒。 – imrealashu

+0

@imrealashu編輯謝謝:) –

回答

2

使用withCount()獲取與每個標記計數的文章標籤:

$tags = Tags::withCount('articles')->get(); 

如果你想計算關係結果的數量船上沒有實際加載它們,你可以使用withCount方法,這將放置{relation}_count列上你的最終模型的文章

顯示號碼指定標籤:

{{ $tag->tag }} ({{ $tag->articles_count }}) 

這將正常工作定義articles在標籤模型中的關係。最好的選擇是多到這裏的許多人,所以你必須要有這樣定義一個數據透視表和articles關係:

public function articles() 
{ 
    return $this->belongsToMany(Article::class); 
} 
+0

所以我相信開始我需要創建一個外鍵?也許'Admin'表中的'tag'字段應該引用'Tags'表中的'ID'字段? –

+0

我不知道你想用什麼結構,這是你的決定。但是如果你想在我的回答工作中編寫代碼,你需要在標籤和文章模型之間定義'hasMany()'(一對多)或'belongsToMany()'(與數據透視表的多對多)關係。 –

+0

對不起再次提出一個愚蠢的問題,但我可以在我的模型中擁有'hasMany()'或'belongsToMany()'關係,而不需要通過外鍵連接兩個表? –

1
class Tags extends Model { 
public $table = "tags"; 
public $timestamps = false; 
protected $fillable = ['tag']; 

public function posts() 
{ 
    return $this->belongsToMany(Post::class); 
}} 

在你控制器你會做這樣的事情。

Tag::withCount('posts')->get(); 

我不太確定它是否能夠完成這項工作,因爲我對結構不太確定。只要讓我知道你是否有任何錯誤。