我试图用Laravel 5中的两个子句对一个集合进行分组,但它只是按照第一个对它进行分组。有人可以帮帮我吗?这是我的代码。
$query = Activity::all()->groupBy('performed_at_year_month', 'performer_id')->toJson();
答案 0 :(得分:30)
我认为https://stackoverflow.com/a/30469061/221745中的解决方案可以改进。关键是要记住按集合分组是集合的集合。因此,以下内容将起作用:
$ unzip myLib.aar -d tempFolder # or other extracting tool
# Change whatever you need
$ jar cvf myNewLib.aar -C tempFolder/ .
<?php
$recs = new \Illuminate\Database\Eloquent\Collection($query);
$grouped = $recs->groupBy('performed_at_year_month')->transform(function($item, $k) {
return $item->groupBy('performer_id');
});
包含您的最终结果
答案 1 :(得分:6)
您可以尝试将它们链接起来,但我不确定它会为您提供所需的结果。可能想检查以确定
$query = Activity::all()->groupBy('performed_at_year_month')->groupBy('performer_id')->toJson();
我刚刚检查了这个,你说的是正确的,它不是保留键,虽然我想我可以猜到为什么。如果一个密钥碰巧是相同的,那么事情就会被覆盖。也许很难确定哪个键是什么,总体感觉有点“hacky”可能有更好的解决方案。
但是,我想我已经想出了如何做到这一点。
$query = Activity::all();
$activities = new \Illuminate\Database\Eloquent\Collection($query);
$activities = $activities->groupBy('performed_at_year_month')->toArray() + $activities->groupBy('performer_id')->toArray();
echo json_encode($activities);
答案 2 :(得分:2)
Laravel 现在(自 5.5.29 起)支持多级嵌套分组,如 https://christoph-rumpel.com/2018/1/groupby-multiple-levels-in-laravel
$query = Activity::all()->groupBy(['performed_at_year_month', 'performer_id'])->toJson();
答案 3 :(得分:1)
您可以传递回调,而不是传递字符串键。回调应返回您希望通过以下方式键入组的值:
$collection->groupBy(function($item, $key){
return $item["key-1"]."-".$item["key-2"];
});