Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Doctrine 如何使用ServiceEntityRepository刷新实体加载_Doctrine_Repository_Symfony4 - Fatal编程技术网

Doctrine 如何使用ServiceEntityRepository刷新实体加载

Doctrine 如何使用ServiceEntityRepository刷新实体加载,doctrine,repository,symfony4,Doctrine,Repository,Symfony4,我已经使用条令\Bundle\DoctrineBundle\Repository\ServiceEntityRepository(SF4中的新建议)加载了一个实体,我想刷新这个实体 但是$entityManager->clear()不要做这项工作 $entityManager->refresh($myentity) 告诉我 条令\ORM\ORMInvalidArgumentException:Entity App\Entity\MyEntity@0000000068ed8bf00000

我已经使用条令\Bundle\DoctrineBundle\Repository\ServiceEntityRepository(SF4中的新建议)加载了一个实体,我想刷新这个实体

但是
$entityManager->clear()
不要做这项工作

$entityManager->refresh($myentity) 
告诉我

条令\ORM\ORMInvalidArgumentException:Entity App\Entity\MyEntity@0000000068ed8bf0000000007dca9dd1不受管理。如果实体从数据库中获取或通过EntityManager注册为新实体,则该实体将被管理

这是我的回购协议:

方法

清除EntityManager。当前由该EntityManager管理的所有实体都将分离

方法

刷新数据库中实体的持久状态,覆盖尚未持久化的任何本地更改

要刷新实体,只需执行以下操作:

$entityManager->refresh($myentity)

如果前面没有清除(),请将其移除。

我找到了解决方案

我在测试设置中得到的entityManager不是ServiceEntityRepository使用的。这是由于ServiceEntityRepository的构造

Si要清除好的entityManager,我必须在存储库上调用clear,而不是在我的entityManager上调用clear:

公共功能测试
{
// ...
//多涅斯基地的vérification de létat de la base de données
$reponseRepository=$this->em->getRepository(Reponse::class);
$questionnaireResponseRepository=$this->em->getRepository(QuestionnaireResponse::class);
$this->em->getRepository(QuestionnaireResponse::class)->find(1)->getVersionId();
$this->assertEquals('0',$reponseRepository->find(1)->getValeur(),'cas1.1');
$this->assertEquals('1',$reponseRepository->find(2)->getValeur(),'cas1.2');
$this->assertEquals(2,$questionnaireResponseRepository->find(1)->getVersionId());
// ...
$reponseRepository->clear();
$QuestionnaireResponseResposition->clear();
$this->assertEquals('1',$reponseRepository->find(1)->getValeur(),'cas3.1');
$this->assertEquals('0',$reponseRepository->find(2)->getValeur(),'cas3.2');
$this->assertEquals(3,$questionnaireResponseRepository->find(1)->getVersionId());
}

我同意你的看法,但就我而言,既不清楚也不刷新都不行。我分别尝试这两种方法,并且只使用刷新,我有引用的错误消息。但是,当我的存储库扩展了条令\ORM\EntityRepository时,它会工作,但当它扩展了条令\Bundle\DoctrineBundle\repository\ServiceEntityRepository时,它不会工作。但是我不能更改它。@MarieP您能添加扩展
Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository
的代码和使用它的控制器代码吗?通过单元测试执行“$client->request”时,实体管理器中的“代理实体”可能被清除或覆盖。试着注释掉
$client->request
,看看它是否有效。请求是测试的核心。没有请求,没有数据库更新。所以没有什么需要澄清的。我真的认为使用ServiceEntityRepository获取的实体不是由这个em管理的,而是使用EntityRepository管理的。