새로 고침이 작동하지 않음: Doctrine Manager 재설정 후 문제
P粉731861241
2023-08-29 15:07:12
<p>데이터에 오류가 있습니다. 정수 열</code>에서 <code>범위를 벗어났습니다. 오류가 발생하여 <code>엔터티 관리자 닫기</code> , 예외</p >에서 I<code>reset Manager</code>
<pre class="brush:php;toolbar:false;">공개 함수 renewDeliveryTime($delayReport) : void
{
노력하다 {
$this->delayReportRepository->updateRenewedDeliveryTimeAt($delayReport, 50000000);
}catch(예외 $예외){
// 범위를 벗어남 오류
$this->managerRegistry->resetManager();
}
}
공개 함수 updateRenewedDeliveryTimeAt($delayReport,$delayDuration)
{
/*** @var DelayReport $delayReport*/
$delayReport->setDelayDuration($delayDuration);
$delayReport->setStatus(DelayReport::STATUS['DONE']);
$this->getEntityManager()->flush();
}</pre>
<p>문제는 데이터에 오류가 발생하고 정수 열</code>에서 <code>범위를 벗어났다는 오류 메시지가 표시되며 < code>닫힌 엔터티 관리자< /code>계속 작업하고 이 목적을 위해 예외 <코드>재설정 관리자</code></p>
<pre class="brush:php;toolbar:false;">공개 함수 enqueue($delayReport) : 무효
{
$this->pushInQueueReport($delayReport);
$this->delayReportRepository->updateStatus($delayReport, DelayReport::STATUS['IN_QUEUE']);
}
공개 함수 updateStatus($delayReport, $status)
{
/*** @var DelayReport $delayReport*/
$delayReport->setStatus($status);
$this->getEntityManager()->flush();
}</pre>
<p>문제는 다른 개체와 거의 동일한 데이터베이스 작업을 수행한 후에 <code>$this->getEntityManager()->flush()</code> 데이터베이스 아무 일도 일어나지 않습니다. 이는 <code>$this->managerRegistry->resetManager()</code></p>와 관련이 있습니다.
<p>이 문제에 대한 해결책은 무엇입니까? </p>
문제는
resetManager()
엔터티 관리자를 직접 참조하는 모든 서비스가 새 인스턴스로 자동 업데이트되지는 않는다는 것입니다.updateStatus()
방법을 사용하면 해당 엔터티가 엔터티 관리자에 의해 관리되는지 쉽게 확인할 수 있습니다.재할당이 여기에 도움이 될지 확실하지 않습니다. 예를 들어
$this->getEntityManager()->merge($delayReport)
.하지만 관리자를 닫고 데이터를 검증하기 전에 데이터를 검증하는 것은 피하는 것이 좋습니다.
편집자:
테스트되지 않았습니다. 레지스트리를 통해 EntityManager를 재설정하는 경우입니다. 하지만 시도해 볼 가치가 있습니다.
으아악