L'actualisation ne fonctionne pas : problème après la réinitialisation de Doctrine Manager
P粉731861241
P粉731861241 2023-08-29 15:07:12
0
1
466

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êcher

code>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 ?

P粉731861241
P粉731861241

répondre à tous (1)
P粉143640496

Le problème estresetManager()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éthodeupdateStatus(), vous pouvez facilement vérifier si l'entité est gérée par le responsable de l'entité.

$uow = $this->getEntityManager()->getUnitOfWork(); if($uow->getEntityState($delayReport) !== UnitOfWork::STATE_MANAGED) { // not managed }

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.

$entityManager = $managerRegistry->getManagerForClass(get_class($delayReport));
    Derniers téléchargements
    Plus>
    effets Web
    Code source du site Web
    Matériel du site Web
    Modèle frontal
    À propos de nous Clause de non-responsabilité Sitemap
    Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!