Aktualisierung funktioniert nicht: Problem nach dem Zurücksetzen des Doctrine Managers
P粉731861241
2023-08-29 15:07:12
<p>Mit meinen Daten stimmt etwas nicht. Ich erhalte die Fehlermeldung <code>außerhalb des gültigen Bereichs</code> und versuche zu verhindern, dass <code>Close Entity Manager</code> funktionieren, da ich<code>reset manager</code> in Ausnahmefällen</p >
<pre class="brush:php;toolbar:false;">public function renewDeliveryTime($delayReport) : void
{
versuchen {
$this->delayReportRepository->updateRenewedDeliveryTimeAt($delayReport, 50000000);
}catch (Ausnahme $Exception){
//Fehler außerhalb des Bereichs
$this->managerRegistry->resetManager();
}
}
öffentliche Funktion updateRenewedDeliveryTimeAt($delayReport,$delayDuration)
{
/*** @var DelayReport $delayReport*/
$delayReport->setDelayDuration($delayDuration);
$delayReport->setStatus(DelayReport::STATUS['DONE']);
$this->getEntityManager()->flush();
}</pre>
<p>Das Problem besteht darin, dass ich einen Fehler in meinen Daten erhalte, die Fehlermeldung <code>außerhalb des gültigen Bereichs für eine Ganzzahlspalte</code> erhalte und ich versuche zu verhindern, dass <p> code>Entitätsmanager geschlossen< /code>Weiterarbeiten und zu diesem Zweck in Ausnahmefällen <code>Manager zurücksetzen</code></p>
<pre class="brush:php;toolbar:false;">public function enqueue($delayReport) : void
{
$this->pushInQueueReport($delayReport);
$this->delayReportRepository->updateStatus($delayReport, DelayReport::STATUS['IN_QUEUE']);
}
öffentliche Funktion updateStatus($delayReport, $status)
{
/*** @var DelayReport $delayReport*/
$delayReport->setStatus($status);
$this->getEntityManager()->flush();
}</pre>
<p>Das Problem ist, dass, nachdem ich ein anderes Objekt und fast denselben Datenbankvorgang habe, es so aussieht, als ob <code>$this->getEntityManager()->flush()</code> Datenbank Es passiert nichts. Dies hat mit <code>$this->managerRegistry->resetManager()</code></p> zu tun.
<p>Was ist die Lösung für dieses Problem? </p>
问题在于
resetManager()
,并不是所有直接引用实体管理器的服务都会自动更新为新的实例。在
updateStatus()
方法中,您可以轻松地检查实体是否由实体管理器管理。不知道重新分配是否有助于此处,例如
$this->getEntityManager()->merge($delayReport)
。但是最好避免关闭管理器并在验证数据之前对其进行验证。
编辑:
未经测试,如果您将通过Registry获取重置的EntityManager。但是这值得一试。