Как можно сохранить сущность дважды? - PullRequest
0 голосов
/ 04 февраля 2019

У меня странная проблема: две из моих сущностей сохраняются дважды случайным образом.Позвольте мне объяснить: у меня есть Entity Project, который имеет отношение ManyToOne к Transaction.Проект также имеет отношения ManyToOne с клиентом.Вот код, вызывающий проблему:

        $transaction = new TransactionBuyer();

        if ($fees) {
            $option = new TransactionOptions();
            //setters 
            $em->persist($option);
        }

        $warrantyOption = new TransactionOptions();
        //other setters
        $deposit = new Deposit();
        // setters

        $transaction->setCustomer($customer);
        $transaction->setAd($ad);
        $transaction->setDeliveryMode($deliveryMode);
        $transaction->setDeposit($deposit);

        $ad->setStatus(AdStatus::AD_PENDING_SELL);
        $project = new CustomerProjectBuy();
        $project->setCustomer($customer);
        $project->setTransactionBuyer($transaction);
        $project->setTransactionSeller($transactionSeller);
        $project->setPromoCode($promoCode);
        $ad->getCar()->addCustomerProject($project);


        $transactionSeller->addProject($project);
        foreach ($transactionSeller->getProjects() as $project) {
            if ($project instanceof CustomerProjectSell) {
                $project->setTransactionBuyer($transaction);
            }
        }
        $customer->addProject($project);
        $transaction->addProject($project);
        $customer->setTermsOfSaleAccepted(true);

        $projectSell = $em->getRepository('CoreBundle:CustomerProjectSell')->findOneBy(['car' => $ad->getCar(), 'transactionSeller' => $transactionSeller]);
        $projectSell->setTransactionBuyer($transaction);

        $em->persist($deposit);
        $em->persist($transaction);
        $em->persist($warrantyOption);
        $em->persist($project);
        $em->flush();

Транзакция и проект выполнялись дважды несколько раз (например, один раз из 3).Два объекта содержат одинаковые данные.Я не могу воспроизвести проблему в моем местном окружении.И недавно у меня появилась эта проблема на производстве:

An exception occurred while executing 'UPDATE Ad SET `Status` = ?, LastUpdateDate = ? WHERE id = ?' with params [5, "2019-02-04 12:01:10", 6098]:

SQLSTATE[40001]: Serialization failure: 1213 Deadlock found when trying to get lock; try restarting transaction

Это исключение в момент сброса.Это может быть связано?

1 Ответ

0 голосов
/ 13 февраля 2019

Не сохраняйте свою дочернюю сущность, просто установите для своих дочерних сущностей ее родительскую сущность и сохраните только свою основную сущность.

Если мы рассматриваем проект как основную сущность, вам следует только сохранить его следующим образом. $em->persist($project);

Прочитайте статью ниже для пошагового руководства.https://symfonycasts.com/screencast/symfony3-doctrine-relations/save-relation#

...