Laravel雄辩:计数($result)vs$result->;计数()

Laravel雄辩:计数($result)vs$result->;计数(),laravel,count,eloquent,Laravel,Count,Eloquent,我对此有点陌生,最初试图用isEmpty()检查我的模型是否返回结果,但我想改为尝试count(),然后我遇到了以下问题: 我有以下代码,它从我的模型返回数据: $results=Game::where('code','=','code)->带有('genre','creator') 无论我是使用first()还是get()与count(result)还是$results->count()结合使用,我都会得到不同的值,我不知道为什么 使用->first()时 使用->get()时 使用->fir

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

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

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

无论我是使用
first()
还是
get()
count(result)
还是
$results->count()
结合使用,我都会得到不同的值,我不知道为什么

使用
->first()时

使用
->get()时

使用
->first()时

使用
->get()时

我不明白1)为什么使用first时,计数与db中的每一行相同。2) 为什么
count()
不能与
first()
一起使用

有人能解释为什么我不能像我想的那样使用count on first吗

更新:

我也不能使用
->isEmpty()
->first()
一起使用,但可以使用
->get()


当我尝试在first中使用它时,我发现
illumb\Database\Query\Builder::isEmpty不存在。

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

Game::where('code','=',$code)->count();
这是在查询生成器实例上调用的。它在数据库查询上运行,而不选择所有行。在此处查看标题聚合

Game::where('code','=',$code)->get()->count();
只要使用
get()
laravel选择行,将它们全部引导为模型,并创建一个集合。此计数在集合上(有点像数组),因此只需获取返回的数字(即,如果对其进行分页或类似操作,则只需获取该数量)。签出计数

Game::where('code','=',$code)->first()->count();
这将在第一个返回的模型上运行。。。除非您已经编写了它,否则默认的laravel模型将不会有
count()
方法

计数($results)

最后,
count()

免责声明:我不知道为什么数据库计数和结果计数不一样,但是我可以解释一下不同类型的计数

Game::where('code','=',$code)->count();
这是在查询生成器实例上调用的。它在数据库查询上运行,而不选择所有行。在此处查看标题聚合

Game::where('code','=',$code)->get()->count();
只要使用
get()
laravel选择行,将它们全部引导为模型,并创建一个集合。此计数在集合上(有点像数组),因此只需获取返回的数字(即,如果对其进行分页或类似操作,则只需获取该数量)。签出计数

Game::where('code','=',$code)->first()->count();
这将在第一个返回的模型上运行。。。除非您已经编写了它,否则默认的laravel模型将不会有
count()
方法

计数($results)
最后,
count()

首先

get()
返回对象集合,
first()
返回查询的模态对象

$results=Game::where('code','=','code)->带有('genre','creator'))
dd($results->count())=11930//数据库中的行数
使用
->get()时

$results=Game::where('code','=','code)->with('genre','creator')->get()
dd($results->count())=1
因为它有一个集合,其中包含大量的数据库数据对象。由于
->count
只获取一个集合,因此它首先返回
1

get()
返回对象集合,
first()
返回查询的模态对象

$results=Game::where('code','=','code)->带有('genre','creator'))
dd($results->count())=11930//数据库中的行数
使用
->get()时

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

因为它有一个集合,其中包含大量的数据库数据对象。由于
->count
只获取一个集合,因此它返回
1

您正在执行此操作wrong@WahyuKristianto感谢您的有用见解!你在做wrong@WahyuKristianto感谢您的有用见解!
dd($results->count()) = 11930 // Number of rows in the db
dd($results->count()) = 1 // What I'd expect the query to return
dd(count($results)) = "count(): Parameter must be an array or an object that implements Countable"
dd(count($results)) = 1