更新が機能しない: Doctrine Manager をリセットした後の問題
P粉731861241
2023-08-29 15:07:12
<p>データに問題があります。<code>整数列の範囲外</code>というエラーが発生し、<code>Close Entity Manager</code>が続行できないようにしようとしました。 <code>例外</p>でマネージャ</code>をリセットするので、機能します。
<pre class="brush:php;toolbar:false;">パブリック関数 renewdeliveryTime($delayReport) : void
{
試す {
$this->layReportRepository->updateReneweddeliveryTimeAt($delayReport, 50000000);
}キャッチ(\例外 $例外){
// 範囲外エラー
$this->managerRegistry->resetManager();
}
}
パブリック関数 updateReneweddeliveryTimeAt($delayReport,$layDuration)
{
/*** @var DelayReport $delayReport*/
$delayReport->setDelayDuration($delayDuration);
$delayReport->setStatus(DelayReport::STATUS['DONE']);
$this->getEntityManager()->flush();
}</pre>
<p>問題は、データでエラーが発生し、整数列</code>で範囲外のエラー メッセージ<code>が表示され、<を防止しようとしているということです。 ;code>クローズドエンティティマネージャ< /code>作業を続行し、この目的のために例外<code>リセットマネージャ</code></p>
<pre class="brush:php;toolbar:false;">パブリック関数 enqueue($delayReport) : void
{
$this->pushInQueueReport($delayReport);
$this->layReportRepository->updateStatus($delayReport, DelayReport::STATUS['IN_QUEUE']);
}
パブリック関数 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($layReport)
のような再割り当てがここで役立つかどうかはわかりません。ただし、データを検証する前にマネージャーを閉じてデータを検証することは避けた方がよいでしょう。
###編集:###レジストリを通じてリセットされた EntityManager を取得するかどうかはテストされていません。しかし、試してみる価値はあります。
リーリー