判断 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 协议》,转载必须注明作者和本文链接
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
讨论数量: 2

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

5年前 评论
Toiu

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

5年前 评论

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