diff --git a/src/Type/Doctrine/Query/QueryResultDynamicReturnTypeExtension.php b/src/Type/Doctrine/Query/QueryResultDynamicReturnTypeExtension.php index e7357b35..7d047768 100644 --- a/src/Type/Doctrine/Query/QueryResultDynamicReturnTypeExtension.php +++ b/src/Type/Doctrine/Query/QueryResultDynamicReturnTypeExtension.php @@ -199,9 +199,14 @@ static function (Type $type, callable $traverse) use ($objectManager): Type { return new MixedType(); } - return $objectManager->getMetadataFactory()->hasMetadataFor($type->getClassName()) - ? new ArrayType(new MixedType(), new MixedType()) - : $traverse($type); + if (!$objectManager->getMetadataFactory()->hasMetadataFor($type->getClassName())) { + return $traverse($type); + } + + // We could return `new ArrayTyp(new MixedType(), new MixedType())` + // but the lack of precision in the array keys/values would give false positive + // @see https://github.com/phpstan/phpstan-doctrine/pull/412#issuecomment-1497092934 + return new MixedType(); } ); } diff --git a/tests/Type/Doctrine/data/QueryResult/queryResult.php b/tests/Type/Doctrine/data/QueryResult/queryResult.php index 61ed83d1..d8681e76 100644 --- a/tests/Type/Doctrine/data/QueryResult/queryResult.php +++ b/tests/Type/Doctrine/data/QueryResult/queryResult.php @@ -155,35 +155,35 @@ public function testReturnTypeOfQueryMethodsWithExplicitArrayHydrationMode(Entit '); assertType( - 'list', + 'list', $query->getResult(AbstractQuery::HYDRATE_ARRAY) ); assertType( - 'list', + 'list', $query->getArrayResult() ); assertType( - 'iterable', + 'iterable', $query->toIterable([], AbstractQuery::HYDRATE_ARRAY) ); assertType( - 'list', + 'list', $query->execute(null, AbstractQuery::HYDRATE_ARRAY) ); assertType( - 'list', + 'list', $query->executeIgnoreQueryCache(null, AbstractQuery::HYDRATE_ARRAY) ); assertType( - 'list', + 'list', $query->executeUsingQueryCache(null, AbstractQuery::HYDRATE_ARRAY) ); assertType( - 'array', + 'mixed', $query->getSingleResult(AbstractQuery::HYDRATE_ARRAY) ); assertType( - 'array|null', + 'mixed', $query->getOneOrNullResult(AbstractQuery::HYDRATE_ARRAY) );