{"id":"f990945cf1f895ff","repo":"laravel/framework","slug":"expected-class-s-to-implement-guessresourcename-m","errorCode":null,"errorMessage":"Expected class %s to implement guessResourceName method. Make sure the model uses the TransformsToResource trait.","messagePattern":"Expected class (.+?) to implement guessResourceName method\\. Make sure the model uses the TransformsToResource trait\\.","errorType":"exception","errorClass":"LogicException","httpStatus":null,"severity":"error","filePath":"src/Illuminate/Collections/Traits/TransformsToResourceCollection.php","lineNumber":54,"sourceCode":"     * @throws \\Throwable\n     */\n    protected function guessResourceCollection(): ResourceCollection\n    {\n        if ($this->isEmpty()) {\n            return new ResourceCollection($this);\n        }\n\n        $model = $this->items[0] ?? null;\n\n        if (! is_object($model)) {\n            throw new LogicException('Resource collection guesser expects the collection to contain objects.');\n        }\n\n        /** @var class-string<Model> $className */\n        $className = get_class($model);\n\n        if (! method_exists($className, 'guessResourceName')) {\n            throw new LogicException(sprintf('Expected class %s to implement guessResourceName method. Make sure the model uses the TransformsToResource trait.', $className));\n        }\n\n        $useResourceCollection = $this->resolveResourceCollectionFromAttribute($className);\n\n        if ($useResourceCollection !== null && class_exists($useResourceCollection)) {\n            return new $useResourceCollection($this);\n        }\n\n        $useResource = $this->resolveResourceFromAttribute($className);\n\n        if ($useResource !== null && class_exists($useResource)) {\n            return $useResource::collection($this);\n        }\n\n        $resourceClasses = $className::guessResourceName();\n\n        foreach ($resourceClasses as $resourceClass) {\n            $resourceCollection = $resourceClass.'Collection';","sourceCodeStart":36,"sourceCodeEnd":72,"githubUrl":"https://github.com/laravel/framework/blob/bd6b5437e6ad87bb49f9b426724f07a9f64e9683/src/Illuminate/Collections/Traits/TransformsToResourceCollection.php#L36-L72","documentation":"Thrown by guessResourceCollection() when the first item's class does not implement a guessResourceName method. The auto-guessing mechanism requires the model to use the TransformsToResource trait (which provides guessResourceName). Without it, the guesser cannot resolve a resource class. LogicException is thrown.","triggerScenarios":"Calling toResourceCollection() on a collection of models that don't use the TransformsToResource trait and have no #[UseResource]/#[UseResourceCollection] PHP attribute. Adding a new model without the trait.","commonSituations":"Upgrading to a Laravel version that introduced TransformsToResource-based guessing and forgetting to add the trait to legacy models. Using third-party models you don't control.","solutions":["Add the TransformsToResource trait to the model (or implement guessResourceName).","Add a #[UseResource(UserResource::class)] or #[UseResourceCollection(...)] attribute to the model.","Pass an explicit resource class to toResourceCollection() to bypass guessing."],"exampleFix":"// before\nclass User extends Model {}\nreturn $users->toResourceCollection();\n\n// after\nuse Illuminate\\Support\\Traits\\TransformsToResource;\n\nclass User extends Model\n{\n    use TransformsToResource;\n}\nreturn $users->toResourceCollection();","handlingStrategy":"validation","validationCode":"if (! method_exists(get_class($collection->first()), 'guessResourceName')) {\n    return $collection->toResourceCollection(UserResource::class);\n}\nreturn $collection->toResourceCollection();","typeGuard":"function usesTransformsToResource(string $class): bool {\n    return in_array(\\Illuminate\\Support\\Traits\\TransformsToResource::class, class_uses_recursive($class), true);\n}","tryCatchPattern":"try {\n    $resource = $collection->toResourceCollection();\n} catch (\\LogicException $e) {\n    $resource = $collection->toResourceCollection(UserResource::class);\n}","preventionTips":["Add the TransformsToResource trait (or a UseResource attribute) to every model exposed as a resource.","Pass an explicit resource class to skip guessing when unsure."],"tags":["laravel","collections","resources","api-resources","trait-required"],"analyzedSha":"bd6b5437e6ad87bb49f9b426724f07a9f64e9683","analyzedAt":"2026-08-06T00:28:32.783Z","schemaVersion":2}