刷新無效:在重置Doctrine管理器後的問題
P粉731861241
2023-08-29 15:07:12
<p>我的資料有錯誤,我收到錯誤<code>out of range on a integer column</code> ,我嘗試阻止<code>關閉實體管理器</code> 繼續工作,為此我<code>reset manager</code> in exception</p >
<pre class="brush:php;toolbar:false;">public function renewDeliveryTime($delayReport) : void
{
try {
$this->delayReportRepository->updateRenewedDeliveryTimeAt($delayReport, 50000000);
}catch (\Exception $exception){
// out of range error
$this->managerRegistry->resetManager();
}
}
public function updateRenewedDeliveryTimeAt($delayReport,$delayDuration)
{
/*** @var DelayReport $delayReport*/
$delayReport->setDelayDuration($delayDuration);
$delayReport->setStatus(DelayReport::STATUS['DONE']);
$this->getEntityManager()->flush();
}</pre>
<p>問題是,我在我的資料中遇到了一個錯誤,我收到了錯誤訊息<code>out of range on a integer column</code>,我試圖阻止<code>closed entity manager< /code>繼續工作,並為此目的在異常中<code>reset manager</code></p>
<pre class="brush:php;toolbar:false;">public function enqueue($delayReport) : void
{
$this->pushInQueueReport($delayReport);
$this->delayReportRepository->updateStatus($delayReport, DelayReport::STATUS['IN_QUEUE']);
}
public function 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)
。但是最好避免關閉管理器並在驗證資料之前對其進行驗證。
編輯:
未經測試,如果您將透過Registry取得重置的EntityManager。但這值得一試。