Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

support for doctrine/orm 3+? #551

Open
arderyp opened this issue Mar 5, 2024 · 6 comments
Open

support for doctrine/orm 3+? #551

arderyp opened this issue Mar 5, 2024 · 6 comments

Comments

@arderyp
Copy link

arderyp commented Mar 5, 2024

I just upgraded orm from 2.19.0 to 3.1.0`, and as a result all of my repositories are now showing phpstan errors that this package was formerly handling, such as:

Method App\Users\Repository\UsersRolesRepository::findAll() should return array<App\Entity\UsersRoles>  
but returns mixed.

This method was triggering no such error before the orm upgrade.

I've confirmed the issue also exists on the latest orm 3.0.x

@arderyp
Copy link
Author

arderyp commented Mar 5, 2024

I'm running:

phpstan-doctrine 1.3.62
orm 3.1.0
dbal 3.8.3

When I upgraded orm from latest 2.x to 3.0.x and 3.1.x, I got lots of errors about EntityManager methods returning mixed.

Am I missing something, or is orm3 only supported WITH dbal4?

I opened another issue before finding this one.

EDIT: bumping to dbal4 is throwing different errors now:

1/1 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%

 -- -------------------------------------------------------------------------------------------------------------------------------------------- 
     Error                                                                                                                                       
 -- -------------------------------------------------------------------------------------------------------------------------------------------- 
     Internal error: Internal error: Doctrine\DBAL\Connection\StaticServerVersionProvider::__construct(): Argument #1 ($version) must be of      
     type string, float given, called in /app/vendor/doctrine/dbal/src/Connection.php on line 186 while  
     analysing file /app/src/Common/Repository/ApplicationsRepository.php                                
     Run PHPStan with -v option and post the stack trace to:                                                                                     
     https://github.com/phpstan/phpstan/issues/new?template=Bug_report.yaml                                                                      
     Child process error (exit code 1):                                                                                                          
 -- -------------------------------------------------------------------------------------------------------------------------------------------- 
                                                                                                               
 [ERROR] Found 2 errors

@arderyp
Copy link
Author

arderyp commented Mar 5, 2024

related to #529

@arderyp
Copy link
Author

arderyp commented Mar 5, 2024

perhaps this is also related: #308 (comment)

@ondrejmirtes
Copy link
Member

Please post the code that leads to "Method App\Users\Repository\UsersRolesRepository::findAll() should return array<App\Entity\UsersRoles>
but returns mixed.".

And please open a separate issue for the internal error, and post the stack trace as the error message instructs you to.

@arderyp
Copy link
Author

arderyp commented Mar 5, 2024

Sure. Again, no errors at all on orm 2.x and dbal 3.x. No other changes other than updating the doctrine packages.

[orm3/dbal3] findAll() should return array<App\Entity\UsersRoles> but returns mixed

<?php

declare(strict_types=1);

namespace App\Repository;

use App\Entity\Applications;
use Doctrine\ORM\EntityRepository;

/** @extends EntityRepository<Applications> */
class ApplicationsRepository extends EntityRepository
{
    /** @return Applications[] */
    public function findAll(): array
    {
        return $this->getEntityManager()->createQueryBuilder()
            ->select('a', 'ae')
            ->from(Applications::class, 'a')
            ->leftJoin('a.expirations', 'ae')
            ->getQuery()
            ->getResult();
    }
}

[orm3/dbal3] Internal error

Note: Using configuration file /app/phpstan.neon.
 1/1 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%  1 sec

 -- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 
     Error                                                                                                                                                                   
 -- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 
     Internal error: Internal error: Doctrine\DBAL\Connection\StaticServerVersionProvider::__construct(): Argument #1 ($version) must be of                                  
     type string, float given, called in /app/vendor/doctrine/dbal/src/Connection.php on line 186 while                              
     analysing file /app/src/Common/Repository/ApplicationsRepository.php                                                            
                                                                                                                                                                             
     Post the following stack trace to https://github.com/phpstan/phpstan/issues/new?template=Bug_report.yaml:                                                               
     ## /app/vendor/doctrine/dbal/src/Connection/StaticServerVersionProvider.php(11)                                                 
     #0 /app/vendor/doctrine/dbal/src/Connection.php(186):                                                                           
     Doctrine\DBAL\Connection\StaticServerVersionProvider->__construct()                                                                                                     
     #1 /app/vendor/doctrine/orm/src/Mapping/ClassMetadataFactory.php(724):                                                          
     Doctrine\DBAL\Connection->getDatabasePlatform()                                                                                                                         
     #2 /app/vendor/doctrine/orm/src/Mapping/ClassMetadataFactory.php(546):                                                          
     Doctrine\ORM\Mapping\ClassMetadataFactory->getTargetPlatform()                                                                                                          
     #3 /app/vendor/doctrine/orm/src/Mapping/ClassMetadataFactory.php(174):                                                          
     Doctrine\ORM\Mapping\ClassMetadataFactory->completeIdGeneratorMapping()                                                                                                 
     #4 /app/vendor/doctrine/doctrine-bundle/Mapping/ClassMetadataFactory.php(18):                                                   
     Doctrine\ORM\Mapping\ClassMetadataFactory->doLoadMetadata()                                                                                                             
     #5 /app/vendor/doctrine/persistence/src/Persistence/Mapping/AbstractClassMetadataFactory.php(343):                              
     Doctrine\Bundle\DoctrineBundle\Mapping\ClassMetadataFactory->doLoadMetadata()                                                                                           
     #6 /app/vendor/doctrine/persistence/src/Persistence/Mapping/AbstractClassMetadataFactory.php(207):                              
     Doctrine\Persistence\Mapping\AbstractClassMetadataFactory->loadMetadata()                                                                                               
     #7 /app/vendor/doctrine/orm/src/EntityManager.php(215):                                                                         
     Doctrine\Persistence\Mapping\AbstractClassMetadataFactory->getMetadataFor()                                                                                             
     #8 /app/vendor/doctrine/orm/src/Query/Parser.php(1570):                                                                         
     Doctrine\ORM\EntityManager->getClassMetadata()                                                                                                                          
     #9 /app/vendor/doctrine/orm/src/Query/Parser.php(1414):                                                                         
     Doctrine\ORM\Query\Parser->RangeVariableDeclaration()                                                                                                                   
     #10 /app/vendor/doctrine/orm/src/Query/Parser.php(1183):                                                                        
     Doctrine\ORM\Query\Parser->IdentificationVariableDeclaration()                                                                                                          
     #11 /app/vendor/doctrine/orm/src/Query/Parser.php(769): Doctrine\ORM\Query\Parser->FromClause()                                 
     #12 /app/vendor/doctrine/orm/src/Query/Parser.php(740):                                                                         
     Doctrine\ORM\Query\Parser->SelectStatement()                                                                                                                            
     #13 /app/vendor/doctrine/orm/src/Query/Parser.php(221): Doctrine\ORM\Query\Parser->QueryLanguage()                              
     #14 /app/vendor/doctrine/orm/src/Query/Parser.php(309): Doctrine\ORM\Query\Parser->getAST()                                     
     #15 /app/vendor/phpstan/phpstan-doctrine/src/Type/Doctrine/Query/QueryResultTypeWalker.php(121):                                
     Doctrine\ORM\Query\Parser->parse()                                                                                                                                      
     #16                                                                                                                                                                     
     /app/vendor/phpstan/phpstan-doctrine/src/Type/Doctrine/QueryBuilder/QueryBuilderGetQueryDynamicReturnTypeExtension.php(198):    
     PHPStan\Type\Doctrine\Query\QueryResultTypeWalker::walk()                                                                                                               
     #17                                                                                                                                                                     
     /app/vendor/phpstan/phpstan-doctrine/src/Type/Doctrine/QueryBuilder/QueryBuilderGetQueryDynamicReturnTypeExtension.php(181):    
     PHPStan\Type\Doctrine\QueryBuilder\QueryBuilderGetQueryDynamicReturnTypeExtension->getQueryType()                                                                       
     #18 phar:///app/vendor/phpstan/phpstan/phpstan.phar/src/Analyser/MutatingScope.php(3619):                                       
     PHPStan\Type\Doctrine\QueryBuilder\QueryBuilderGetQueryDynamicReturnTypeExtension->getTypeFromMethodCall()                                                              
     #19 phar:///app/vendor/phpstan/phpstan/phpstan.phar/src/Analyser/MutatingScope.php(1416):                                       
     PHPStan\Analyser\MutatingScope->methodCallReturnType()                                                                                                                  
     #20 phar:///app/vendor/phpstan/phpstan/phpstan.phar/src/Analyser/MutatingScope.php(1422):                                       
     PHPStan\Analyser\MutatingScope->PHPStan\Analyser\{closure}()                                                                                                            
     #21 phar:///app/vendor/phpstan/phpstan/phpstan.phar/src/Analyser/MutatingScope.php(587):                                        
     PHPStan\Analyser\MutatingScope->resolveType()                                                                                                                           
     #22                                                                                                                                                                     
     /app/vendor/phpstan/phpstan-doctrine/src/Type/Doctrine/QueryBuilder/ReturnQueryBuilderExpressionTypeResolverExtension.php(78):  
     PHPStan\Analyser\MutatingScope->getType()                                                                                                                               
     #23                                                                                                                                                                     
     /app/vendor/phpstan/phpstan-doctrine/src/Type/Doctrine/QueryBuilder/ReturnQueryBuilderExpressionTypeResolverExtension.php(46):  
     PHPStan\Type\Doctrine\QueryBuilder\ReturnQueryBuilderExpressionTypeResolverExtension->getMethodReflection()                                                             
     #24 phar:///app/vendor/phpstan/phpstan/phpstan.phar/src/Analyser/MutatingScope.php(605):                                        
     PHPStan\Type\Doctrine\QueryBuilder\ReturnQueryBuilderExpressionTypeResolverExtension->getType()                                                                         
     #25 phar:///app/vendor/phpstan/phpstan/phpstan.phar/src/Analyser/MutatingScope.php(587):                                        
     PHPStan\Analyser\MutatingScope->resolveType()                                                                                                                           
     #26 phar:///app/vendor/phpstan/phpstan/phpstan.phar/src/Rules/FunctionReturnTypeCheck.php(52):                                  
     PHPStan\Analyser\MutatingScope->getType()                                                                                                                               
     #27 phar:///app/vendor/phpstan/phpstan/phpstan.phar/src/Rules/Methods/ReturnTypeRule.php(43):                                   
     PHPStan\Rules\FunctionReturnTypeCheck->checkReturnType()                                                                                                                
     #28 phar:///app/vendor/phpstan/phpstan/phpstan.phar/src/Analyser/FileAnalyser.php(107):                                         
     PHPStan\Rules\Methods\ReturnTypeRule->processNode()                                                                                                                     
     #29 phar:///app/vendor/phpstan/phpstan/phpstan.phar/src/Node/ClassStatementsGatherer.php(108):                                  
     PHPStan\Analyser\FileAnalyser->PHPStan\Analyser\{closure}()                                                                                                             
     #30 phar:///app/vendor/phpstan/phpstan/phpstan.phar/src/Analyser/NodeScopeResolver.php(577):                                    
     PHPStan\Node\ClassStatementsGatherer->__invoke()                                                                                                                        
     #31 phar:///app/vendor/phpstan/phpstan/phpstan.phar/src/Analyser/NodeScopeResolver.php(468):                                    
     PHPStan\Analyser\NodeScopeResolver::PHPStan\Analyser\{closure}()                                                                                                        
     #32 phar:///app/vendor/phpstan/phpstan/phpstan.phar/src/Analyser/NodeScopeResolver.php(411):                                    
     PHPStan\Analyser\NodeScopeResolver->processStmtNode()                                                                                                                   
     #33 phar:///app/vendor/phpstan/phpstan/phpstan.phar/src/Analyser/NodeScopeResolver.php(576):                                    
     PHPStan\Analyser\NodeScopeResolver->processStmtNodes()                                                                                                                  
     #34 phar:///app/vendor/phpstan/phpstan/phpstan.phar/src/Analyser/NodeScopeResolver.php(411):                                    
     PHPStan\Analyser\NodeScopeResolver->processStmtNode()                                                                                                                   
     #35 phar:///app/vendor/phpstan/phpstan/phpstan.phar/src/Analyser/NodeScopeResolver.php(678):                                    
     PHPStan\Analyser\NodeScopeResolver->processStmtNodes()                                                                                                                  
     #36 phar:///app/vendor/phpstan/phpstan/phpstan.phar/src/Analyser/NodeScopeResolver.php(411):                                    
     PHPStan\Analyser\NodeScopeResolver->processStmtNode()                                                                                                                   
     #37 phar:///app/vendor/phpstan/phpstan/phpstan.phar/src/Analyser/NodeScopeResolver.php(650):                                    
     PHPStan\Analyser\NodeScopeResolver->processStmtNodes()                                                                                                                  
     #38 phar:///app/vendor/phpstan/phpstan/phpstan.phar/src/Analyser/NodeScopeResolver.php(380):                                    
     PHPStan\Analyser\NodeScopeResolver->processStmtNode()                                                                                                                   
     #39 phar:///app/vendor/phpstan/phpstan/phpstan.phar/src/Analyser/FileAnalyser.php(166):                                         
     PHPStan\Analyser\NodeScopeResolver->processNodes()                                                                                                                      
     #40 phar:///app/vendor/phpstan/phpstan/phpstan.phar/src/Command/WorkerCommand.php(132):                                         
     PHPStan\Analyser\FileAnalyser->analyseFile()                                                                                                                            
     #41                                                                                                                                                                     
     phar:///app/vendor/phpstan/phpstan/phpstan.phar/vendor/evenement/evenement/src/Evenement/EventEmitterTrait.php(97):             
     PHPStan\Command\WorkerCommand->PHPStan\Command\{closure}()                                                                                                              
     #42 phar:///app/vendor/phpstan/phpstan/phpstan.phar/vendor/clue/ndjson-react/src/Decoder.php(117):                              
     _PHPStan_cc8d35ffb\Evenement\EventEmitter->emit()                                                                                                                       
     #43                                                                                                                                                                     
     phar:///app/vendor/phpstan/phpstan/phpstan.phar/vendor/evenement/evenement/src/Evenement/EventEmitterTrait.php(97):             
     _PHPStan_cc8d35ffb\Clue\React\NDJson\Decoder->handleData()                                                                                                              
     #44 phar:///app/vendor/phpstan/phpstan/phpstan.phar/vendor/react/stream/src/Util.php(62):                                       
     _PHPStan_cc8d35ffb\Evenement\EventEmitter->emit()                                                                                                                       
     #45                                                                                                                                                                     
     phar:///app/vendor/phpstan/phpstan/phpstan.phar/vendor/evenement/evenement/src/Evenement/EventEmitterTrait.php(97):             
     _PHPStan_cc8d35ffb\React\Stream\Util::_PHPStan_cc8d35ffb\React\Stream\{closure}()                                                                                       
     #46                                                                                                                                                                     
     phar:///app/vendor/phpstan/phpstan/phpstan.phar/vendor/react/stream/src/DuplexResourceStream.php(154):                          
     _PHPStan_cc8d35ffb\Evenement\EventEmitter->emit()                                                                                                                       
     #47                                                                                                                                                                     
     phar:///app/vendor/phpstan/phpstan/phpstan.phar/vendor/react/event-loop/src/StreamSelectLoop.php(201):                          
     _PHPStan_cc8d35ffb\React\Stream\DuplexResourceStream->handleData()                                                                                                      
     #48                                                                                                                                                                     
     phar:///app/vendor/phpstan/phpstan/phpstan.phar/vendor/react/event-loop/src/StreamSelectLoop.php(173):                          
     _PHPStan_cc8d35ffb\React\EventLoop\StreamSelectLoop->waitForStreamActivity()                                                                                            
     #49 phar:///app/vendor/phpstan/phpstan/phpstan.phar/src/Command/WorkerCommand.php(98):                                          
     _PHPStan_cc8d35ffb\React\EventLoop\StreamSelectLoop->run()                                                                                                              
     #50                                                                                                                                                                     
     phar:///app/vendor/phpstan/phpstan/phpstan.phar/vendor/symfony/console/Command/Command.php(259):                                
     PHPStan\Command\WorkerCommand->execute()                                                                                                                                
     #51 phar:///app/vendor/phpstan/phpstan/phpstan.phar/vendor/symfony/console/Application.php(870):                                
     _PHPStan_cc8d35ffb\Symfony\Component\Console\Command\Command->run()                                                                                                     
     #52 phar:///app/vendor/phpstan/phpstan/phpstan.phar/vendor/symfony/console/Application.php(261):                                
     _PHPStan_cc8d35ffb\Symfony\Component\Console\Application->doRunCommand()                                                                                                
     #53 phar:///app/vendor/phpstan/phpstan/phpstan.phar/vendor/symfony/console/Application.php(157):                                
     _PHPStan_cc8d35ffb\Symfony\Component\Console\Application->doRun()                                                                                                       
     #54 phar:///app/vendor/phpstan/phpstan/phpstan.phar/bin/phpstan(124):                                                           
     _PHPStan_cc8d35ffb\Symfony\Component\Console\Application->run()                                                                                                         
     #55 phar:///app/vendor/phpstan/phpstan/phpstan.phar/bin/phpstan(125):                                                           
     _PHPStan_cc8d35ffb\{closure}()                                                                                                                                          
     #56 /app/vendor/phpstan/phpstan/phpstan(8): require('...')                                                                      
     #57 /app/vendor/bin/phpstan(119): include('...')                                                                                
     #58 {main}                                                                                                                                                              
     Child process error (exit code 1):                                                                                                                                      
 -- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 

 [ERROR] Found 2 errors                                                                                                 
                                                                                                                        
Used memory: 132.5 MB

@arderyp
Copy link
Author

arderyp commented Mar 6, 2024

if there's something you'd like me to test @ondrejmirtes, or some other info I can provide to help, just let me know.

I know it's a bit thorny to debug these more complex dependency issues remotely, since it can't be easily replicated on phpstan,org

as always, I value all of your work!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants