eloquent查询结果使用集合方法filter后由数组变为了对象是怎么回事?

今天在编码过程中,遇到以下问题,多方查询后还是不得其解,所以请教各位。
代码如下:

            $category = BillCategory::query()->where('freeze_status', 1)->get();
            //将一级分类筛选出来
            $categoryLevelOne = $category->filter(function ($item) {
                return $item->parent_id == -1;
            });

如图代码,我使用eloquent查询出来的是对象数组,但是经过集合方法filter()后就变成了对象,结果如图:

eloquent查询结果使用集合方法filter后由数组变为了对象是怎么回事?
我试了map方法,处理完成之后就还是数组,为什么filter会变为对象?

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
最佳答案

这样试试

$category = BillCategory::query()->where('freeze_status', 1)->get();
//将一级分类筛选出来
$categoryLevelOne = $category->filter(function ($item) {
    return $item->parent_id == -1;
})->values();
3年前 评论
讨论数量: 5

为什么不直接这样写呢:

$category = BillCategory::query()->where('freeze_status', 1)->where('parent_id', -1)->get();

而且就算是按照你的写法,也应该没问题才对的!

3年前 评论

这样试试

$category = BillCategory::query()->where('freeze_status', 1)->get();
//将一级分类筛选出来
$categoryLevelOne = $category->filter(function ($item) {
    return $item->parent_id == -1;
})->values();
3年前 评论

@夜游人 你好,我刚才专门试了下集合方法filter(),文档上写的是,结果仍输出为数组(数组无自定义键值),文档上介绍如下:

file

我的测试代码如下:

file 输出结果为:

file

这样带键值的数组到前台被json解析后成为js对象,给我前台数组遍历带来了极大的障碍。 使用map,where都是返回的无自定义键值的数组,很正常。 是我使用姿势不对吗?

3年前 评论

@8565012 厉害了 :+1: ,确实是这样的。就是文档上写的有点迷惑人的感觉。

file

我看文档,还以为使用filter方法后结果直接就是默认顺序索引呢,没想到结果是自定义键值。 非常感谢 :+1:

3年前 评论
岁月流沙

为什么用filter,简单过滤 where更方便吧

$category = BillCategory::query()->where('freeze_status', 1)->get();
//将一级分类筛选出来
$categoryLevelOne = $category->where('parent_id', -1)->all();
3年前 评论
coder_russell (楼主) 3年前
岁月流沙 (作者) 3年前

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