当将条令/持久性从1.0升级到1.3时,我遇到了静态代码分析问题。
Repository (DoctrineORMEntityRepository) does not accept
DoctrinePersistenceObjectRepository.
问题出在这个上
<?php
declare(strict_types=1);
namespace AppbundleRepositoryCompany;
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。有人知道可能是什么吗?
此错误是正确的。EntityManagerInterface
从ObjectManager
接口继承了getRepository
方法,其中ObjectRepository
是类型提示的。
因此,您不能依赖于从方法返回EntityRepository
,因为实现可以选择只返回ObjectRepository
。
您可能应该为其他内容键入hint,比如EntityManager
。
好的,所以我发现这是由于Doctrine更改了名称空间。这是一个已报告的错误。
https://github.com/doctrine/orm/pull/7997https://github.com/doctrine/orm/pull/7953