Skip to content

Commit ddb4f59

Browse files
committed
Fix custom entity repository
1 parent 80b4d48 commit ddb4f59

File tree

2 files changed

+25
-2
lines changed

2 files changed

+25
-2
lines changed

src/Type/Doctrine/QueryBuilder/ReturnQueryBuilderExpressionTypeResolverExtension.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,8 @@ public function getType(Expr $expr, Scope $scope): ?Type
4848
if ($callerClassReflection->is(QueryBuilder::class)) {
4949
return null; // covered by QueryBuilderMethodDynamicReturnTypeExtension
5050
}
51-
if ($callerClassReflection->is(EntityRepository::class)) {
52-
return null; // createQueryBuilder covered by EntityRepositoryCreateQueryBuilderDynamicReturnTypeExtension
51+
if ($callerClassReflection->is(EntityRepository::class) && $expr->name->name === 'createQueryBuilder') {
52+
return null; // covered by EntityRepositoryCreateQueryBuilderDynamicReturnTypeExtension
5353
}
5454
}
5555

tests/Type/Doctrine/data/QueryResult/queryBuilderExpressionTypeResolver.php

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
use Doctrine\Common\Collections\Criteria;
66
use Doctrine\ORM\AbstractQuery;
77
use Doctrine\ORM\EntityManagerInterface;
8+
use Doctrine\ORM\EntityRepository;
89
use Doctrine\ORM\Query\Expr\Andx;
910
use Doctrine\ORM\Query\Expr\From;
1011
use Doctrine\ORM\QueryBuilder;
@@ -14,6 +15,11 @@
1415
class QueryBuilderExpressionTypeResolverTest
1516
{
1617

18+
/**
19+
* @var MyRepository
20+
*/
21+
private $myRepository;
22+
1723
public function testQueryTypeIsInferredOnAcrossMethods(EntityManagerInterface $em): void
1824
{
1925
$query = $this->getQueryBuilder($em)->getQuery();
@@ -30,6 +36,13 @@ public function testQueryTypeIsInferredOnAcrossMethodsEvenWhenVariableAssignment
3036
assertType('Doctrine\ORM\Query<null, QueryResult\Entities\Many>', $queryBuilder->getQuery());
3137
}
3238

39+
public function testDiveIntoCustomEntityRepository(EntityManagerInterface $em): void
40+
{
41+
$queryBuilder = $this->myRepository->getCustomQueryBuilder($em);
42+
43+
assertType('Doctrine\ORM\Query<null, QueryResult\Entities\Many>', $queryBuilder->getQuery());
44+
}
45+
3346
public function testFirstClassCallableDoesNotFail(EntityManagerInterface $em): void
3447
{
3548
$this->getQueryBuilder(...);
@@ -55,3 +68,13 @@ private function getBranchingQueryBuilder(EntityManagerInterface $em): QueryBuil
5568
return $queryBuilder;
5669
}
5770
}
71+
72+
class MyRepository extends EntityRepository {
73+
74+
private function getCustomQueryBuilder(EntityManagerInterface $em): QueryBuilder
75+
{
76+
return $em->createQueryBuilder()
77+
->select('m')
78+
->from(Many::class, 'm');
79+
}
80+
}

0 commit comments

Comments
 (0)