phpstan-doctrine icon indicating copy to clipboard operation
phpstan-doctrine copied to clipboard

Incorrect PHPStan Error for Method Return Type Declaration

Open bedfir opened this issue 1 year ago • 7 comments

Hi All,

I encountered an issue where PHPStan threw an incorrect error regarding method return type declaration. Here's the scenario:

Problem: I have a method getData() in my codebase which fetches data from the database and returns an array of associative arrays. The return type declaration of this method is specified accurately. However, PHPStan still throws this error suggesting that the return type is incorrect.

 Method                                                                                                           

         App\Repository\FakeRepository::getData()  

         should return array<array{key1: string, key2: string, key3: string,                   
         key4: int, key5: int}> but returns array.  
/**
 * @return array<array{
 *     "key1": string,
 *     "key2": string,
 *     "key3": string,
 *     "key4": int,
 *     "key5": int
 * }>
 */
public function getData(): array
{
    $result = $this->createQueryBuilder('a')
        ->select(.....)
        ->where('a.status = :validated')
        ->groupBy(.....)
        ->setParameter('validated', Status::VALIDATED);

    return $result
        ->getQuery()
        ->getArrayResult();
}

Additional Information: "php": ">=8.3", "phpstan/extension-installer": "^1.3.1", "phpstan/phpstan": "^1.10.47", "phpstan/phpstan-deprecation-rules": "^1.1.4", "phpstan/phpstan-doctrine": "^1.3.53", "phpstan/phpstan-phpunit": "^1.3.15", "phpstan/phpstan-symfony": "^1.3.5",

Thank you for your attention to this matter. Please let me know if you need any further information or clarification.

bedfir avatar Feb 13 '24 10:02 bedfir

Please make sure you have the latest versions of PHPStan and phpstan-doctrine installed. And please make sure you have configured objectManagerLoader. See the README here.

ondrejmirtes avatar Feb 13 '24 10:02 ondrejmirtes

I think this is because getArrayResult is not supported yet. You may avoid the issue with getResult() until https://github.com/phpstan/phpstan-doctrine/pull/520 is merged.

VincentLanglet avatar Feb 13 '24 13:02 VincentLanglet