判断 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 协议》,转载必须注明作者和本文链接
一直用的count,以后出问题估计他们要改疯了
count 在 php7.2+ 更加严格, 不能用来判断单个模型(会抛出异常). 但是可以判断集合. 所以, 如果eloqument 查询并非是使用的如 first find 等只固定返回单个模型或null查询方式. 是可以使用count判断的(如 get all paginate ).