Я использую Doctring LockMode :: PESSIMISTIC_WRITE
, но когда я использую
usr / bin / ab -n 100 -c 10
мои базы данных похожи на это
некоторый баланс повторяется
Я не знаю, как это исправить
это мой контроллер
/**
* @Route("/bank/moneyin", name = "money_in")
*
*/
public function moneyIn(Request $request)
{
$amount = 10;
$user = 123;
$entityManager = $this->getDoctrine()->getEntityManager();
$data = $entityManager->find('BankBundle:user', $user);
$balance = $data->getBalance() + $amount;
if ($balance < 0)
{
$ret = ['result' => 'error', 'ret' => '餘額不足'];
}
if ($balance >= 0)
{
$entityManager->getConnection()->beginTransaction();
try
{
$user = $entityManager->find('BankBundle:user', $user, LockMode::PESSIMISTIC_WRITE);
$user->setBalance($balance);
// $entityManager->persist($user);
$bank = new entry();
$bank->setUser($user);
$bank->setAmount($amount);
$bank->setBalance($balance);
$entityManager->persist($bank);
$entityManager->flush();
$bankdata = $bank->toArray();
$entityManager->getConnection()->commit();
$ret = ['result' => 'ok', 'ret' => $bankdata];
return new JsonResponse($ret);
}
catch(Exception $e)
{
$entityManager->getConnection()->rollBack();
return new JsonResponse('error!');
}
}
}