public function applyOnCollection(CollectionInterface $collection) { $newCollection = null; foreach ($this->getAppliedGroups() as $group) { if ($group['type'] == 'db') { continue; } if (!$newCollection) { $newCollection = $collection->groupBy(function ($item) use($group) { return $item->{$group['field']}; }); } else { $newCollection = $newCollection->each(function ($groupItems) use($group) { return (new Collection($groupItems))->groupBy(function ($item) use($group) { return $item->{$group['field']}; }); }, true); } } return $newCollection ?? $collection; }