-1

我在我的存储库中创建了一个函数:

/**
     * @return array<int, array<int, string>>
     */
    public function findByBuildingGroupByCompany(string $buildingId): array
    {
        return $this->createQueryBuilder('qr')
            ->select('DISTINCT(qr.company)')
            ->leftJoin('qr.building', 'b')
            ->leftJoin('qr.quotes', 'q')
            ->andWhere('b.id = :buildingId')
            ->andWhere('qr.company IS NOT NULL')
            ->setParameter('buildingId', $buildingId)
            ->getQuery()
            ->getResult()
            ;
    }

这个函数在我的控制器中调用,如果我转储它,我有

array:3 [▼
  0 => array:1 [▼
    1 => "a00e9bcb-bffd-442a-aa9c-b0ca627fda36"
  ]
  1 => array:1 [▼
    1 => "777ea601-39d0-4d54-939f-64a56912a843"
  ]
  2 => array:1 [▼
    1 => "b78bf56c-b99d-40c7-b317-458c4df7e286"
  ]
]

所以我的函数返回我输入的内容array<int, array<int, string>>,但是 phpstan 抛出这个错误: Method App\Repository\QuoteRequestRepository::findByBuildingGroupByCompany() should return array<int, array<int, string>> but returns mixed
如果我返回混合,它会抛出这两个错误:

Method
         App\Repository\QuoteRequestRepository::findByBuildingGroupByCompany()
         return type has no value type specified in iterable type array.
          See:
         https://phpstan.org/blog/solving-phpstan-no-value-type-specified-in-i
         terable-type
  49     Method
         App\Repository\QuoteRequestRepository::findByBuildingGroupByCompany()
         should return array but returns mixed

我真的不知道如何处理它:(

任何想法 ?

4

1 回答 1

1

最近版本的 phpstan-doctrine 扩展现在包括 DQL 的类型推断,包括 QueryBuilders,因此返回的类型现在将比“混合”更具体。

安装扩展,看看它是如何改进的。

于 2022-03-03T11:19:55.587 回答