cari

Rumah  >  Soal Jawab  >  teks badan

Muat semula tidak berfungsi: Isu selepas menetapkan semula Pengurus Doktrin

<p>Saya mempunyai ralat dengan data saya, saya mendapat ralat <kod>di luar julat pada lajur integer</code> dan saya cuba menghalang <kod>Tutup Pengurus Entiti</kod> , sebagai saya<kod>set semula pengurus</kod> <pre class="brush:php;toolbar:false;">public function renewDeliveryTime($delayReport) : batal { cuba { $this->delayReportRepository->updateRenewedDeliveryTimeAt($delayReport, 50000000); }tangkap (Exception $exception){ //ralat di luar julat $this->managerRegistry->resetManager(); } } kemas kini fungsi awamRenewedDeliveryTimeAt($delayReport,$delayDuration) { /*** @var DelayReport $delayReport*/ $delayReport->setDelayDuration($delayDuration); $delayReport->setStatus(DelayReport::STATUS['DONE']); $this->getEntityManager()->flush(); }</pre> <p>Masalahnya ialah, saya mendapat ralat dalam data saya, saya mendapat mesej ralat <kod>di luar julat pada lajur integer</code>, dan saya cuba menghalang < kod>pengurus entiti tertutup< /code>Teruskan bekerja dan untuk tujuan ini dalam pengecualian <kod>pengurus semula</code></p> <pre class="brush:php;toolbar:false;">public function enqueue($delayReport) : batal { $this->pushInQueueReport($delayReport); $this->delayReportRepository->updateStatus($delayReport, DelayReport::STATUS['IN_QUEUE']); } status kemas kini fungsi awam($delayReport, $status) { /*** @var DelayReport $delayReport*/ $delayReport->setStatus($status); $this->getEntityManager()->flush(); }</pre> <p>Masalahnya ialah selepas saya mempunyai objek lain dan operasi pangkalan data yang hampir sama, nampaknya <code>$this->getEntityManager()->flush()</code> pangkalan data Tiada apa-apa yang berlaku. Ini ada kaitan dengan <code>$this->managerRegistry->resetManager()</code></p> <p>Apakah penyelesaian kepada masalah ini? </p>
P粉731861241P粉731861241454 hari yang lalu570

membalas semua(1)saya akan balas

  • P粉143640496

    P粉1436404962023-08-30 13:15:44

    Masalahnya ialahresetManager() bahawa tidak semua perkhidmatan yang merujuk terus kepada pengurus entiti dikemas kini secara automatik kepada kejadian baharu.

    Dalam kaedah updateStatus() anda boleh menyemak dengan mudah sama ada entiti diuruskan oleh pengurus entiti.

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

    Tidak pasti sama ada penugasan semula akan membantu di sini, seperti $this->getEntityManager()->merge($delayReport).

    Tetapi adalah lebih baik untuk mengelak daripada menutup pengurus dan mengesahkan data sebelum mengesahkannya.

    Editor:

    Belum diuji, jika anda akan mendapat penetapan semula EntityManager melalui Pendaftaran. Tetapi ia berbaloi untuk dicuba.

    $entityManager = $managerRegistry->getManagerForClass(get_class($delayReport));
    

    balas
    0
  • Batalbalas