Jos*_*ain 0 php group-by laravel eloquent laravel-5
我的目标是检索用户的所有“项目”,然后在我的视图中按他们的“状态”分组显示。有 4 种可能的状态,每种状态<div>在包含项目信息的页面上都有自己的状态。经过一番摸索,我相信我需要使用这样的groupBy()方法:
$items = Item::ownedBy( Auth::id() )->groupBy('status')->get();
Run Code Online (Sandbox Code Playgroud)
这似乎确实进行了某种分组,但是当我遍历集合时,我最多得到 4 个结果,每个状态一个。这并不能真正解决我的问题,因为我需要为每个状态显示用户的所有项目,而不仅仅是一个。我一定在这里遗漏了一些东西,我真的很想避免对每个状态进行查询并以这种方式显示它们。我想我可以按状态过滤集合并创建 4 个新集合,但这不是groupBy()应该做的吗?
您可以使用 laravel 和 Collections 轻松做到这一点。集合具有强大的 API 和许多方便的方法,可以轻松实现您想要的。
您的错误是您在 QueryBuilder 对象上调用 groupBy ,该对象仅返回按数据库中的记录分组。相反,您必须选择您需要的所有记录,然后它们将作为集合返回。之后,您可以根据需要操作集合。所以你需要的是:
$items = Item::ownedBy( Auth::id() )->get()->groupBy('status');
Run Code Online (Sandbox Code Playgroud)
您可以在此处查看所有 Colletion 类有用的方法。