Doctrine LockMode :: PESSIMISTIC базы данных повторяются - PullRequest
1 голос
/ 24 октября 2019

Я использую Doctring LockMode :: PESSIMISTIC_WRITE

, но когда я использую

usr / bin / ab -n 100 -c 10

мои базы данных похожи на это

enter image description here

некоторый баланс повторяется

Я не знаю, как это исправить

это мой контроллер

/**
     * @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!');
            }
        }
    }
...