Tôi đang viết một hàm PHP lưu trữ/cập nhật bộ dữ liệu lớn vào một bảng và có thể gây ra bế tắc. Tôi đã thử điều tra làm thế nào để thử lại một giao dịch thất bại với Doctrine nhưng thật đáng buồn không thể tìm thấy bất kỳ thông tin trực tuyến. Tôi cuối cùng đã viết đoạn mã sauLàm cách nào để thử lại giao dịch sau khi bế tắc bằng Doctrine?
$retry = 0;
$done = false;
while (!$done and $retry < 3) {
try {
$this->entityManager->flush();
$done = true;
} catch (\Exception $e) {
sleep(1);
$retry++;
}
}
if ($retry == 3) {
throw new Exception(
"[Exception: MySQL Deadlock] Too many people accessing the server at the same time. Try again in few minutes"
);
}
Câu hỏi của tôi: là có một cơ hội tiếp cận này sẽ chèn bản sao trong cơ sở dữ liệu? nếu có, làm cách nào tôi có thể buộc Doctrine quay lại giao dịch?
Cảm ơn bạn :) Điều này ít nhất là cho tôi một ý tưởng về cách tiến hành. – Rorchackh
Trên thực tế, điều này không còn đúng, như trường hợp ngoại lệ 'EntityManager' vào trạng thái đóng và nó sẽ ném một' ORMException 'nói rằng trình quản lý thực thể được đóng trên lần thử thứ hai. Phiên bản Doctrine 2.4. * – Mantas
đây là cách đặt lại entitymanager khi đóng https://codedump.io/share/rjB45oiwtqwo/1/doctrine2-the-entitymanager-is-closed-how-to-reset-entity-manager-in- symfony2 –