Skip to content

Commit f8e3f88

Browse files
committed
Discover repository class from #[Entity] attribute on PHP 8
By doing it like this, we don't need to instantiate the object manager at all.
1 parent 9b22ee2 commit f8e3f88

File tree

1 file changed

+12
-0
lines changed

1 file changed

+12
-0
lines changed

src/Type/Doctrine/ObjectMetadataResolver.php

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
namespace PHPStan\Type\Doctrine;
44

5+
use Doctrine\ORM\Mapping\Entity;
56
use Doctrine\Persistence\ObjectManager;
67
use PHPStan\Reflection\ReflectionProvider;
78
use function is_file;
@@ -97,6 +98,17 @@ public function getResolvedRepositoryClass(): string
9798

9899
public function getRepositoryClass(string $className): string
99100
{
101+
if (PHP_MAJOR_VERSION >= 8 && $this->reflectionProvider->hasClass($className)) {
102+
$classReflection = $this->reflectionProvider->getClass($className)->getNativeReflection();
103+
$attribute = $classReflection->getAttributes(Entity::class)[0] ?? null;
104+
if ($attribute !== null) {
105+
$attributeInstance = $attribute->newInstance();
106+
if ($attributeInstance->repositoryClass !== null) {
107+
return $attributeInstance->repositoryClass;
108+
}
109+
}
110+
}
111+
100112
$objectManager = $this->getObjectManager();
101113
if ($objectManager === null) {
102114
return $this->getResolvedRepositoryClass();

0 commit comments

Comments
 (0)