1616use PHPStan \Php \PhpVersion ;
1717use PHPStan \Reflection \MethodReflection ;
1818use PHPStan \Type \Constant \ConstantStringType ;
19+ use PHPStan \Type \ConstantTypeHelper ;
1920use PHPStan \Type \Doctrine \Query \QueryResultTypeBuilder ;
2021use PHPStan \Type \Doctrine \Query \QueryResultTypeWalker ;
2122use PHPStan \Type \Doctrine \Query \QueryType ;
@@ -76,7 +77,7 @@ public function getTypeFromMethodCall(
7677 if (!isset ($ args [$ queryStringArgIndex ])) {
7778 return new GenericObjectType (
7879 Query::class,
79- [new MixedType (), new MixedType ()],
80+ [new MixedType (), new MixedType (), new MixedType () ],
8081 );
8182 }
8283
@@ -95,21 +96,28 @@ public function getTypeFromMethodCall(
9596 }
9697
9798 $ typeBuilder = new QueryResultTypeBuilder ();
99+ $ query = $ em ->createQuery ($ queryString );
100+ $ hydrationMode = ConstantTypeHelper::getTypeFromValue ($ query ->getHydrationMode ());
98101
99102 try {
100- $ query = $ em ->createQuery ($ queryString );
101103 QueryResultTypeWalker::walk ($ query , $ typeBuilder , $ this ->descriptorRegistry , $ this ->phpVersion , $ this ->driverDetector );
102104 } catch (ORMException | DBALException | NewDBALException | CommonException | MappingException | \Doctrine \ORM \Exception \ORMException $ e ) {
103- return new QueryType ($ queryString , null , null );
105+ return new QueryType ($ queryString , null , null , null , $ hydrationMode );
104106 } catch (AssertionError $ e ) {
105- return new QueryType ($ queryString , null , null );
107+ return new QueryType ($ queryString , null , null , null , $ hydrationMode );
106108 }
107109
108- return new QueryType ($ queryString , $ typeBuilder ->getIndexType (), $ typeBuilder ->getResultType ());
110+ return new QueryType (
111+ $ queryString ,
112+ $ typeBuilder ->getIndexType (),
113+ $ typeBuilder ->getResultType (),
114+ null ,
115+ $ hydrationMode ,
116+ );
109117 }
110118 return new GenericObjectType (
111119 Query::class,
112- [new MixedType (), new MixedType ()],
120+ [new MixedType (), new MixedType (), new MixedType () ],
113121 );
114122 });
115123 }
0 commit comments