Репозиторий (Doctrine\ORM\EntityRepository) не принимает 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 возвращает EntityRepository, но тип возврата getReposiry - ObjectRepository и несовместим. Работал с версией 1.0. Кто-нибудь знает, что это может быть?

2 ответа

Решение

Хорошо, поэтому я узнал, что это связано с изменением пространств имен Doctrine. Это обнаруженная ошибка.

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

Эта ошибка верна. EntityManagerInterface наследует getRepository метод от ObjectManager интерфейс, где ObjectRepositoryнапечатан.

Так что ты не можешь полагаться на EntityRepository для возврата из метода, поскольку реализация может выбрать возврат только ObjectRepository.

Вам, вероятно, следует напечатать что-нибудь еще, например EntityManager вместо.

Другие вопросы по тегам