判断 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 协议》,转载必须注明作者和本文链接
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 7

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

3天前 评论
MArtian (楼主) 3天前
foobar

isEmpty() isNotEmpty()

3天前 评论
haaid

blank() filled() 啊 :smirk:

3天前 评论

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

3天前 评论

统一转成数组不就好了

3天前 评论
yzbfeng 19小时前

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

2天前 评论

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

16小时前 评论

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