我的请求处理的代码(仅用于测试目的):
$em->beginTransaction();
try {
$repository = $em->getRepository(User::class);
/** @var User $entity */
$entity = $repository->findOneBy(['user' => 1]);
$em->lock($entity, LockMode::PESSIMISTIC_WRITE);
// $em->refresh($entity); Would solve the problem. See edit at bottom.
$entity->increase(1); // just an integer field will be increased
sleep(2);
$em->persist($entity);
$em->flush();
$em->commit();
} catch (\Exception $e) {
$em->rollback();
throw $e;
}
当我发出两个请求(由不同的Nginx孩子处理)后发生:
由于在事务集内部存在写锁,因此在完成第二个请求后我希望 32 。为什么这不起作用?
编辑:我必须添加$em->refresh($entity)
才能使其正常运行。但是我想知道每次都必须手动完成。
答案 0 :(得分:0)
似乎做$em->refresh($entity)
的解决方案就是这样做的。我问过Doctrine 2开发人员。