2013-07-31 27 views
2

我想統計屬於標籤的帖子數量。我應該使用方法還是動態屬性?與Laravel在口頭ORM中的'方法'與'動態屬性'?

<?php 

class Tag extends Eloquent { 

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

    public function postsCount() 
    { 
     return count($this->posts); 
    } 

    public function getPostsCountAttribute() 
    { 
     return count($this->posts); 
    } 

} 

所以在模板中應該使用動態屬性:

{{ $tag->postCount }} 

或方法:從Laravel 4關於雄辯的Dynamic Properties(訪問)的文件

{{ $tag->postCount() }} 
+0

如果你想要一個純SQL計數,你應該使用該方法,而不是動態屬性(訪問器)。你將會有這樣的東西:'$ tag-> posts() - > count()'。 –

回答

6

摘錄的關係(粗體是我的):

Eloquent允許你通過動態屬性訪問你的關係。 Eloquent會自動加載關係爲你,甚至足夠聰明,知道是否調用get(對於一對多關係)或第一個(對於一對一關係)方法。然後可以通過與關係相同的名稱通過動態屬性進行訪問。

也就是說,使用爲數據庫關係或動態屬性(訪問器)定義的方法將表現不同。

如果使用方法如下發出後計數:

$count = $tag->posts()->count(); 

這將生成具有COUNT聚合函數正確的SQL。

在另一方面,如果你使用動態屬性(訪問)發出後數如下:

$count = count($tag->posts); 

這將獲取所有帖子,將其轉換爲一個數組然後計算數組元素的個數。

就你而言,選擇應該取決於與標籤相關的帖子的用法。如果你只想計數,那麼使用方法和聚合函數。但是,如果除了計算外,還將對這些帖子做其他操作,然後使用動態屬性(訪問器)。

+0

我只想數它們(並且批量顯示數字),所以如果我不讓你看,我應該直接使用'{{$ tag-> posts() - > count()}}? – Shaddow

+0

我相信會更有效率。 –