2015-05-26 142 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