刷新无效:在重置Doctrine管理器后的问题
P粉731861241
P粉731861241 2023-08-29 15:07:12
[PHP讨论组]
<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-&gt;delayReportRepository-&gt;updateRenewedDeliveryTimeAt($delayReport, 50000000); }catch (\Exception $exception){ // out of range error $this-&gt;managerRegistry-&gt;resetManager(); } } public function updateRenewedDeliveryTimeAt($delayReport,$delayDuration) { /** * @var DelayReport $delayReport */ $delayReport-&gt;setDelayDuration($delayDuration); $delayReport-&gt;setStatus(DelayReport::STATUS['DONE']); $this-&gt;getEntityManager()-&gt;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-&gt;pushInQueueReport($delayReport); $this-&gt;delayReportRepository-&gt;updateStatus($delayReport, DelayReport::STATUS['IN_QUEUE']); } public function updateStatus($delayReport, $status) { /** * @var DelayReport $delayReport */ $delayReport-&gt;setStatus($status); $this-&gt;getEntityManager()-&gt;flush(); }</pre> <p>问题是,在我有另一个对象和几乎相同的数据库操作之后,似乎<code>$this-&gt;getEntityManager()-&gt;flush()</code>不再起作用,数据库中什么也没有发生。这与<code>$this-&gt;managerRegistry-&gt;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)

但是最好避免关闭管理器并在验证数据之前对其进行验证。

编辑:

未经测试,如果您将通过Registry获取重置的EntityManager。但是这值得一试。

$entityManager = $managerRegistry->getManagerForClass(get_class($delayReport));
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号