我的数据有错误,我收到错误 out of range on a integer column
,我尝试阻止 关闭实体管理器
继续工作,为此我 reset manager
in exception
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(); }
问题是,我在我的数据中遇到了一个错误,我收到了错误信息out of range on a integer column
,我试图阻止closed entity manager
继续工作,并为此目的在异常中reset manager
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(); }
问题是,在我有另一个对象和几乎相同的数据库操作之后,似乎$this->getEntityManager()->flush()
不再起作用,数据库中什么也没有发生。这与$this->managerRegistry->resetManager()
有关
这个问题的解决方案是什么?
问题在于
resetManager()
,并不是所有直接引用实体管理器的服务都会自动更新为新的实例。在
updateStatus()
方法中,您可以轻松地检查实体是否由实体管理器管理。不知道重新分配是否有助于此处,例如
$this->getEntityManager()->merge($delayReport)
。但是最好避免关闭管理器并在验证数据之前对其进行验证。
编辑:
未经测试,如果您将通过Registry获取重置的EntityManager。但是这值得一试。