Laravel Eloquent:count($ result)vs $ result-> count()

时间:2018-10-18 12:38:00

标签: laravel count eloquent

对此我有点陌生,最初是想检查我的模型是否使用isEmpty()返回结果,但以为我会尝试使用count(),因此遇到了以下问题:

我有以下代码,该代码从我的模型返回数据:

$results = Game::where('code', '=', $code)->with('genre', 'creator')

无论我将first()还是get()count(result)$results->count()结合使用,我都会得到不同的值,而且我不确定为什么。

使用->first()

dd($results->count()) = 11930 // Number of rows in the db

使用->get()

dd($results->count()) = 1 // What I'd expect the query to return

使用->first()

dd(count($results)) = "count(): Parameter must be an array or an object that implements Countable"

使用->get()

dd(count($results)) = 1

我不明白1)为什么第一次使用时,计数与数据库中的每一行都相同。 2)为什么count()无法与first()一起使用。

有人能阐明为什么我不能像我想的那样首先使用指点吗?

更新

我还不能将->isEmpty()->first()一起使用,但是可以与->get()一起使用...?

第一次尝试使用它时,我会得到Illuminate\Database\Query\Builder::isEmpty does not exist.

2 个答案:

答案 0 :(得分:0)

免责声明:我不确定为什么您的数据库计数和结果计数不相同,但是我可以对不同类型的计数有所了解。

Game::where('code', '=', $code)->count();

这在查询构建器实例上被调用。它在数据库查询上运行,而不选择所有行。在此处查看标题集合https://laravel.com/docs/5.7/queries

Game::where('code', '=', $code)->get()->count();

使用get()时,laravel会选择这些行,将它们全部作为模型引导,并创建一个集合。此计数在集合上(有点像数组),因此仅获取返回的数字(即,如果将它们分页或类似的东西,它将得到该数量)。检出计数 here

Game::where('code', '=', $code)->first()->count();

这是在第一个返回的模型上运行的...除非您已经编写了它,否则默认的laravel模型将没有count()方法。

count($results)

最后,当count()不是类方法时,它只是默认的php函数,它返回数组或其他对象的长度(documentation)。

答案 1 :(得分:0)

首先

get()返回对象的集合,而first()返回查询的模式对象。

$results = Game::where('code', '=', $code)->with('genre', 'creator')

dd($results->count()) = 11930 // Number of rows in the db

使用->get()

$results = Game::where('code', '=', $code)->with('genre', 'creator')->get()
dd($results->count()) = 1

因为它具有集合,其中包含许多数据库数据对象。 ->count仅获得一个集合,因此它返回1