Php EntityManager已关闭,条令\\ORM\\orException

Php EntityManager已关闭,条令\\ORM\\orException,php,symfony,doctrine-orm,Php,Symfony,Doctrine Orm,尝试通过try cache方法插入数据时出现以下错误 这是我的try-catch函数 $cardid = new CarddetailsId($uuidGenerator->generate()); $cardnumber = self::getCardNumber(); //this is generated random numbers $cardexistencetype = ($key == "giftCardSchemeData") ? "Physical" : "E-Card"

尝试通过try cache方法插入数据时出现以下错误

这是我的try-catch函数

$cardid = new CarddetailsId($uuidGenerator->generate());
$cardnumber = self::getCardNumber(); //this is generated random numbers
$cardexistencetype = ($key == "giftCardSchemeData") ? "Physical" : "E-Card" ;
$otherdata = array('cardnumber' => $cardnumber, 'cardexistencetype' => $cardexistencetype, 'isgiftcard' => true , 'giftcardamount' => $preload['value'], 'expirymonths' => $preload['expiryMonths'], 'isloyaltycard' => false, 'loyaltypoints' => null, 'pinnumber' => 4627);
$output = $otherdata;

try {
     $commandBus->dispatch(
         new CreateCarddetails($cardid, $output)
     );
  }
catch (UniqueConstraintViolationException $e) {
    var_dump($e);
   self::generateCardFunctionForErrorException($cardid, $output, $commandBus);
 }
卡号是唯一的,所以我调用了另一个函数并重新插入数据

public function generateCardFunctionForErrorException($cardid, $data, $commandBus) {
            $cardnumber = self::getCardNumber();
            $data['cardnumber'] = $cardnumber;
            try {
              $commandBus->dispatch(
                  new CreateCarddetails($cardid, $data)
              );
            }
            catch (UniqueConstraintViolationException $e) {
                 var_dump($e);
                self::generateCardFunctionForErrorException($cardid, $data, $commandBus);
            }
          }
createCardDetails调用该命令并启动存储库函数 下面是我的存储库功能代码

public function save(Carddetails $carddetails)
    {
        $this->getEntityManager()->persist($carddetails);
        $this->getEntityManager()->flush();
    }
我的命令处理函数是

public function handleCreateCarddetails(CreateCarddetails $command)
    {
        $carddetails = new Carddetails($command->getCarddetailsId(), $command->getCarddetailsData());
        $this->carddetailsRepository->save($carddetails);
    }

检查是否存在
Carddetails
实体,然后使用该
UniqueConstraint
为字段保存具有相同值的新实体

例如,假设您有重复的ID错误:

public function handleCreateCarddetails(CreateCarddetails $command)
{
    $existingDetails = $this->carddetailsRepository->find($command->getCarddetailsId());
    if (!$existingDetails){
        $carddetails = new Carddetails($command->getCarddetailsId(), $command->getCarddetailsData());
        $this->carddetailsRepository->save($carddetails);
    } else {
        throw new \Exception('Already have Details with this ID');
    }
}

检查是否存在
Carddetails
实体,然后使用该
UniqueConstraint
为字段保存具有相同值的新实体

例如,假设您有重复的ID错误:

public function handleCreateCarddetails(CreateCarddetails $command)
{
    $existingDetails = $this->carddetailsRepository->find($command->getCarddetailsId());
    if (!$existingDetails){
        $carddetails = new Carddetails($command->getCarddetailsId(), $command->getCarddetailsData());
        $this->carddetailsRepository->save($carddetails);
    } else {
        throw new \Exception('Already have Details with this ID');
    }
}

显示处理该命令的“CreateCarddetails”类的处理程序。
public函数handleCreateCarddetails(CreateCarddetails$command){$carddetails=new carddetails($command->getCarddetailsId(),$command->getCarddetailsData());$this->carddetailsRepository->save($carddetails);}
这是我的commandhandlerAn,entity manager的一个有趣特性是,它在抛出异常后不再可用。这是故意的。如果确实要从异常中恢复,则需要创建一个新的实体管理器。显示处理该命令的“CreateCarddetails”类的处理程序。
public函数handleCreateCarddetails(CreateCarddetails$command){$carddetails=new carddetails($command->getCarddetailsId(),$command->getCarddetailsData())$this->carddetailsRepository->save($carddetails);}
这是我的命令。实体管理器的一个有趣特性是,它在抛出异常后不再可用。这是故意的。如果你真的想从异常中恢复,那么你需要创建一个新的实体管理器。事实上,我每次都有一个至少2000个数字的循环,如果我检查是否存在,它会增加我的请求和响应时间。@Tharunkumar原则ORM不太适合批量插入。改为使用SQL。好的,谢谢@svgrafovac实际上我有一个最小2000个数字的循环,每次检查是否存在,它都会增加我的请求和响应时间。@Tharunkumar原则ORM不太适合批量插入。改用SQL。好的,谢谢@svgrafov