国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

刷新無效:在重置Doctrine管理器后的問題
P粉731861241
P粉731861241 2023-08-29 15:07:12
0
1
699
<p>我的數(shù)據(jù)有錯誤,我收到錯誤 <code>out of range on a integer column</code> ,我嘗試阻止 <code>關閉實體管理器</code> 繼續(xù)工作,為此我 <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>問題是,我在我的數(shù)據(jù)中遇到了一個錯誤,我收到了錯誤信息<code>out of range on a integer column</code>,我試圖阻止<code>closed entity manager</code>繼續(xù)工作,并為此目的在異常中<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>問題是,在我有另一個對象和幾乎相同的數(shù)據(jù)庫操作之后,似乎<code>$this->getEntityManager()->flush()</code>不再起作用,數(shù)據(jù)庫中什么也沒有發(fā)生。這與<code>$this->managerRegistry->resetManager()</code>有關</p> <p>這個問題的解決方案是什么?</p>
P粉731861241
P粉731861241

全部回復(1)
P粉143640496

問題在于resetManager(),并不是所有直接引用實體管理器的服務都會自動更新為新的實例。

updateStatus()方法中,您可以輕松地檢查實體是否由實體管理器管理。

$uow = $this->getEntityManager()->getUnitOfWork();
if($uow->getEntityState($delayReport) !== UnitOfWork::STATE_MANAGED) {
    // not managed
}

不知道重新分配是否有助于此處,例如$this->getEntityManager()->merge($delayReport)。

但是最好避免關閉管理器并在驗證數(shù)據(jù)之前對其進行驗證。

編輯:

未經(jīng)測試,如果您將通過Registry獲取重置的EntityManager。但是這值得一試。

$entityManager = $managerRegistry->getManagerForClass(get_class($delayReport));
最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板