Il y a un problème avec mes données, j'obtiens l'erreur hors plage sur une colonne entière
et j'essaie d'empêcher Close Entity Manager
fonctionne, car jeréinitialiser le gestionnaire
dans l'exception
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(); }Le problème est que j'obtiens une erreur dans mes données, je reçois le message d'erreur
hors plage sur une colonne entière
, et j'essaie d'empêchercode>gestionnaire d'entités fermées< /code>Continuer à travailler et à cet effet dans l'exception
reset manager
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(); }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
$this->getEntityManager()->flush()
base de données Rien ne se passe. Cela a à voir avec$this->managerRegistry->resetManager()
Quelle est la solution à ce problème ?
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.