如何使用 groupBy() 对 Collection 对象进行分组

How to use groupBy() to group a Collection object

我的目标是检索所有用户的 'items',然后在我的视图中按他们的 'status' 分组显示。在包含项目信息的页面上,有 4 种可能的状态,每种状态都有自己的 <div>。经过一番探索后,我相信我需要像这样使用 groupBy() 方法:

$items = Item::ownedBy( Auth::id() )->groupBy('status')->get();

这似乎确实进行了某种分组,但是当我遍历集合时,我最多得到 4 个结果,每个状态一个。这并不能真正解决我的问题,因为我需要为每个状态显示用户的所有项目,而不仅仅是一个。我一定在这里遗漏了一些东西,我真的很想避免查询每个状态并以这种方式显示它们。我想我可以按状态过滤集合并创建 4 个新集合,但这不是 groupBy() 应该做的吗?

您可以使用 laravel 和 Collections 轻松做到这一点。 Collections有强大的API和很多好用的方法,轻松实现你想要的。

您在这里的错误是您在 QueryBuilder object 上调用 groupBy,它 returns 仅按数据库中的记录分组。相反,您必须 select 您需要的所有记录,然后它们将作为 collection 返回。之后,您可以随意操作 collection 。所以你需要的是:

$items = Item::ownedBy( Auth::id() )->get()->groupBy('status');

您可以查看所有收藏class有用的方法here