L'actualisation ne fonctionne pas : problème après la réinitialisation de Doctrine Manager
P粉731861241
2023-08-29 15:07:12
<p>Il y a un problème avec mes données, j'obtiens l'erreur <code>hors plage sur une colonne entière</code> et j'essaie d'empêcher <code>Close Entity Manager</code> fonctionne, car je<code>réinitialiser le gestionnaire</code> dans l'exception</p >
<pre class="brush:php;toolbar:false;">fonction publique renouvelerDeliveryTime($delayReport) : void
{
essayer {
$this->delayReportRepository->updateRenewedDeliveryTimeAt($delayReport, 50000000);
}attraper (Exception $exception){
// erreur hors de portée
$this->managerRegistry->resetManager();
}
}
fonction publique updateRenewedDeliveryTimeAt($delayReport,$delayDuration)
{
/*** @var DelayReport $delayReport*/
$delayReport->setDelayDuration($delayDuration);
$delayReport->setStatus(DelayReport::STATUS['DONE']);
$this->getEntityManager()->flush();
}</pré>
<p>Le problème est que j'obtiens une erreur dans mes données, je reçois le message d'erreur <code>hors plage sur une colonne entière</code>, et j'essaie d'empêcher <p> code>gestionnaire d'entités fermées< /code>Continuer à travailler et à cet effet dans l'exception <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']);
}
fonction publique updateStatus($delayReport, $status)
{
/*** @var DelayReport $delayReport*/
$delayReport->setStatus($status);
$this->getEntityManager()->flush();
}</pré>
<p>Le problème est qu'après avoir un autre objet et presque la même opération de base de données, il semble que <code>$this->getEntityManager()->flush()</code> base de données Rien ne se passe. Cela a à voir avec <code>$this->managerRegistry->resetManager()</code></p>
<p>Quelle est la solution à ce problème ? </p>
Le problème est
resetManager()
que tous les services qui font directement référence au gestionnaire d'entités ne sont pas automatiquement mis à jour vers la nouvelle instance.Dans la méthode
updateStatus()
, vous pouvez facilement vérifier si l'entité est gérée par le responsable de l'entité.Je ne sais pas si la réaffectation serait utile ici, comme
$this->getEntityManager()->merge($delayReport)
.Mais il vaut mieux éviter de fermer le gestionnaire et de valider les données avant de les valider.
Éditeur :
Non testé, si vous obtiendrez la réinitialisation d'EntityManager via le registre. Mais ça vaut le coup d'essayer.