Muat semula tidak berfungsi: Isu selepas menetapkan semula Pengurus Doktrin
P粉731861241
P粉731861241 2023-08-29 15:07:12
0
1
563
<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粉731861241
P粉731861241

membalas semua(1)
P粉143640496

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));
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan