存储库 (Doctrine\ORM\EntityRepository) 不接受 Doctrine\Persistence\ObjectRepository

Repository (Doctrine\ORM\EntityRepository) does not accept Doctrine\Persistence\ObjectRepository

将 doctrine/persistence 从 1.0 升级到 1.3 时,我遇到了静态代码分析问题。

Repository (Doctrine\ORM\EntityRepository) does not accept                    
         Doctrine\Persistence\ObjectRepository.     

问题出在这个

<?php
declare(strict_types=1);

namespace Appbundle\Repository\Company;

class CompanyRepository
{
    /**
     * @var EntityManagerInterface
     */
    private $entityManager;

    /**
     * @var EntityRepository
     */
    private $entityRepository;

    /**
     * @var ProfileRepository
     */
    private $profileRepository;

    public function __construct(
        EntityManagerInterface $entityManager,
    ) {
        $this->entityManager = $entityManager;
        $this->entityRepository = $entityManager->getRepository(Company::class);
    }

代码作为 getRepository reuturns EntityRepository 但 return 类型的 getReposiry 是 ObjectRepository 并且不兼容。 使用 1.0 版。有人知道它可能是什么吗?

这个错误是正确的。 EntityManagerInterfaceObjectManager 接口继承 getRepository 方法,其中 ObjectRepository is typehinted.

所以你不能依赖 EntityRepository 从方法中 returned 因为实现可以选择 return 只是 ObjectRepository.

您可能应该为其他内容输入提示,例如 EntityManager

好的,所以我发现这是由于 Doctrine 更改了命名空间。这是一个报告的错误。

https://github.com/doctrine/orm/pull/7997 https://github.com/doctrine/orm/pull/7953