如何过滤Laravel Collection,获取各perm_id对应最大id的记录
Laravel Collection按指定属性分组并保留每组最大值项
当然可以实现你的需求,下面提供两种简洁的方法来处理这个Laravel集合:
方法一:先排序再去重
通过先按id降序排序,让每个perm_id对应的最大id项排在最前面,再按perm_id去重,就能直接得到目标结果:
// 假设你的集合实例为$collection $filteredCollection = $collection->sortByDesc('id') ->unique('perm_id') ->values();
sortByDesc('id'):将集合按id从大到小排序unique('perm_id'):保留每个perm_id第一次出现的项(此时就是该组id最大的项)values():重置集合的键名,使其从0开始连续编号
方法二:分组后提取每组最大值
先按perm_id分组,再在每个分组内筛选出id最大的项:
$filteredCollection = $collection->groupBy('perm_id') ->map(function ($group) { // 对每个分组按id降序排序后取第一个(最大id项) return $group->sortByDesc('id')->first(); }) ->values();
groupBy('perm_id'):将集合按perm_id分组,每个分组是对应perm_id的所有项map():遍历每个分组,筛选出该组内id最大的项values():同样用于重置键名
两种方法最终都会得到你预期的结果:
[ { "id": 10, "perm_id": 2 }, { "id": 9, "perm_id": 1 } ]
内容的提问来源于stack exchange,提问作者prakashchhetri
相关产品推荐
相关产品推荐

