Php 原则2:交易无效
由我的请求处理的代码(仅用于测试目的): 当我启动两个请求(由不同的Nginx子级处理)时,会发生以下情况:Php 原则2:交易无效,php,nginx,doctrine-orm,Php,Nginx,Doctrine Orm,由我的请求处理的代码(仅用于测试目的): 当我启动两个请求(由不同的Nginx子级处理)时,会发生以下情况: 请求前:号码是30 请求1被触发 请求2被触发 请求1已完成。电话号码是31 请求2已完成。数字为31 我希望在完成第二个请求后32,因为事务集中有写锁。为什么这不起作用 编辑:我必须添加$em->refresh($entity)才能让它工作。但是我想知道我是否每次都必须手动执行此操作。似乎执行$em->refresh($entity)的解决方案就是这样做的。我问了Doctrine 2的
编辑:我必须添加
$em->refresh($entity)
才能让它工作。但是我想知道我是否每次都必须手动执行此操作。似乎执行$em->refresh($entity)
的解决方案就是这样做的。我问了Doctrine 2的开发者。看来解决方案是通过执行$em->refresh($entity)
来实现。我问了条令2的开发者
$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;
}