Репозиторий (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
вместо.