2015-05-26 193 views
2

我正在研究一個包的源代碼,rtConner/laravel-tagging。在這個包裏有一個叫TaggableTrait的特質。上線179,在一個叫addTag()方法,有這條線,我不明白:Laravel:take(1) - > count();這是什麼意思?

$previousCount = $this->tagged()->where('tag_slug', '=', $tagSlug)->take(1)->count();

這是什麼線路呢?具體來說,我的問題是->take(1)->count();部分,我們是從where子句中取出1個條目然後進行計數的?

+0

看起來像邏輯這裏是採取第一個匹配tag_slug並計算你有多少。所以它返回1或0.這是我猜的類型雜耍的方式。伯爵在那裏,所以我們得到的數字,而不是一個標籤的對象。 – arma

+0

只有和'groupBy'一起纔有意義。否則,這是多餘的,正如下面的答案中所述。 –

回答

4

從Laravel文檔:

取(INT $值)

別名設置查詢的 「限制」 的值。

所以基本上你要做的就是建設有Query Builder查詢,你是從字面上說:

所有標籤的選擇計數,其中tag_slug爲$ tagSlug和返回第一行

它等於

SELECT COUNT(*) FROM tags WHERE tag_slug = 'blabla' LIMIT 1 

由於COUNT()是聚合函數,它將總是返回一行(與where條件匹配的所有行的計數),所以->take(1)是obselote,並且會給你帶有或不帶它的相同結果。

+0

是不是'COUNT()'之前應用了'LIMIT'? – lukasgeiter

+0

不,您可以在[MySQL文檔](http://dev.mysql.com/doc/refman/5.0/en/select.html)頁面上看到哪些語句被模擬和執行的順序。限制在所有過濾完成後應用並且我們有一個行集。 – shaddy

+0

我明白了。那麼它確實已經過時了。 – lukasgeiter