判断 ORM 返回结果为空

在使用 Model::where()->get() 方法的时候,如果没有匹配条件也会返回一个空的结果集

Illuminate\Database\Eloquent\Collection {#1456
  #items: []
}

这个时候不能使用简单的取反 empty()=='' 判断是否有查询结果

if(! $result = Model::where()->get())
{
    ...
}

因为 $result 被赋值了一个空的结果集,并不为 null,所以这里的判断结果为 false

正确的判断

$result = Model::where()->get();

if(! $result->count()){
    ...
}
// 或者
if($result->isEmpty()){
    ...
}

但如果只取一条数据的时候是可以直接使用取反来判断的

if(! $result = Model::where()->first())
{
    ...
}
本作品采用《CC 协议》,转载必须注明作者和本文链接
悲观者永远正确,乐观者永远前行。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
讨论数量: 10
celaraze

感谢分享,不过我 get 出来的一般都直接进 foreach 循环了,遇到了的时候我会注意一下。

2年前 评论
MArtian (楼主) 2年前
foobar

isEmpty() isNotEmpty()

2年前 评论

blank() filled() 啊 :smirk:

2年前 评论

兄弟,看一遍laravel文档会有很大帮助

2年前 评论

统一转成数组不就好了

2年前 评论
yzbfeng 2年前

get() 获取的是数据集的实例,这个数据集 就是一个 套在多个模型实例上的,如果判断 数据集里是否为空,就要用 数据集自己的 判断方法 first() 获取的是模型实例,空的话返回就是null

2年前 评论

所以熟读文档,了解每个官方或者框架的函数返回值和返回类型是很重要的

2年前 评论

这篇文章非常好。

2年前 评论

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