, class-string> */ protected static array $resolvedCollectionClasses = []; /** * Create a new Eloquent Collection instance. * * @param array $models * @return TCollection */ public function newCollection(array $models = []) { static::$resolvedCollectionClasses[static::class] ??= ($this->resolveCollectionFromAttribute() ?? static::$collectionClass); return new static::$resolvedCollectionClasses[static::class]($models); } /** * Resolve the collection class name from the CollectedBy attribute. * * @return class-string|null */ public function resolveCollectionFromAttribute() { $reflectionClass = new ReflectionClass(static::class); $attributes = $reflectionClass->getAttributes(CollectedBy::class); if (! isset($attributes[0]) || ! isset($attributes[0]->getArguments()[0])) { return; } return $attributes[0]->getArguments()[0]; } }