判断 Eloqument 模型查询数据结果是否为空

前言

由于官方文档指出:查询构造器查询出来的数据,不要使用 count 方法来确定是否存在与查询相匹配的记录,应该使用 exists 和 doesntExist 方法,所以,我们应该尽量避免使用count方法来判断是否查询到了结果集。

方法一

当使用查询构造器的时候,可以使用exists()或者doesntExist()方法来判断有或者没有查询到结果集,该方法返回的是Boolean类型数据,当使用exists()方法时,查询到结果集返回true,否则返回false;doesntExist()方法返回的数据反之。

return DB::table('orders')->where('finalized', 1)->exists();

return DB::table('orders')->where('finalized', 1)->doesntExist();

当使用Eloqument模型查询数据时,使用方法如下(以User模型为例):

return Users::where('email','xxx@qq.com')->exists();

return Users::where('email','xxx@qq.com')->doesntExist();

方法二

由于 Eloquent 的集合对象继承了 Laravel 的 集合基类,因此我们可以使用Laravel集合中的方法对查询结果集进行判断。

这种方法返回的也是Boolean类型数据,详细方法如下:

$users = User::where('active', 1)->all();

return $users->isEmpty();

return $users->isNotEmpty();

总结

虽然我亲测使用count()方法虽然也能判断出搜索结果是否为空,但是官方明确指出:不要使用 count 方法来确定是否存在与查询相匹配的记录,所以我们还是尽量使用官方给出的这两种方法去对结果集进行验证吧,避免开发不必要的出错误,如果对您有帮助,就点个赞吧!!!

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 2

一直用的count,以后出问题估计他们要改疯了

6年前 评论
Toiu

count 在 php7.2+ 更加严格, 不能用来判断单个模型(会抛出异常). 但是可以判断集合. 所以, 如果eloqument 查询并非是使用的如 first find 等只固定返回单个模型或null查询方式. 是可以使用count判断的(如 get all paginate ).

6年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!