如何在Eloquent ORM中使用groupBy()来对集合进行分组

时间:2015-05-20 23:03:40

标签: php laravel group-by eloquent laravel-5

我的目标是检索所有用户的“&#39;项目&#39;然后在我的视图中显示按其状态&#39;分组。有4种可能的状态,每种状态在页面上都有自己的<div>,其中包含项目&#39;信息。经过一番探讨后,我相信我需要使用groupBy()方法,如下所示:

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

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

1 个答案:

答案 0 :(得分:3)

您可以使用laravel和Collections轻松完成。集合具有强大的API和许多方便的方法,可以轻松实现您想要的目标。

您的错误在于您在QueryBuilder对象上调用groupBy,该对象仅返回来自数据库的记录。相反,您必须选择所需的所有记录,然后它们将作为集合返回。之后,您可以根据需要操作集合。所以你需要的是:

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

您可以查看所有Colletion类有用的方法here