对此我有点陌生,最初是想检查我的模型是否使用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.
答案 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
。