坚持使用onFlush Symfony

时间:2018-11-06 10:18:23

标签: symfony doctrine persist

我正试图坚持使用onFlush事件监听器,但出现此错误:

  

在执行“ INSERT INTO日志(dateSauvegarde,montantProvision,montantPrecedant,commentaire,dateCreation,dateModification,idProfil,idSinistre)值(?,?,?,?,?,?,?,?)”时发生异常: / p>      

SQLSTATE [HY093]:参数编号无效:未绑定任何参数

但是..这些字段填充得很好...

    public function onFlush(OnFlushEventArgs $args){
    $em = $args->getEntityManager();
    $uow = $em->getUnitOfWork();

    $session = new Session();
    $loggedContact = $session->get('loggedContact');


    foreach ($uow->getScheduledEntityUpdates() as $entity) {
        if ($entity instanceof ApcSinistres) {
            $changements = $uow->getEntityChangeSet($entity);
            foreach($changements as $colonne => $changement){

                if($colonne == "provisions"){
                    $logs = new ApcSauvegardeProvisionsHistorisation();
                    $logs->setDatesauvegarde(new DateTime());
                    $logs->setIdprofil($loggedContact);
                    $logs->setIdsinistre($entity);
                    $logs->setCommentaire("Recalcul des provisions suite au changement du statut du sinistre");
                    $logs->setMontantprovision($changement[1]);
                    $logs->setMontantprecedent($changement[0]);

                    $uow->persist($logs );
                }

            }
            return;
        }
    }

}

我不知道为什么会有这个错误,有人可以解决吗?

致谢

1 个答案:

答案 0 :(得分:0)

如果要在ApcSauvegardeProvisionsHistorisation中保留某些内容,则需要手动更新onFlush对象的变更集。原因是更改集在调用onFlush之前已经计算过。

$logMetadata = $em->getClassMetadata(ApcSauvegardeProvisionsHistorisation::class);
// ...
$em->persist($logs);
$uow->computeChangeSet($logMetadata, $logs);