【问题标题】:Persist into onFlush Symfony坚持使用 onFlush Symfony
【发布时间】:2019-04-09 17:26:21
【问题描述】:

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

执行“INSERT INTO 日志(dateSauvegarde、montantProvision、montantPrecedant、commentaire、dateCreation、dateModification、idProfil、idSinistre)VALUES (?, ?, ?, ?, ?, ?, ?, ?) 时发生异常:

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;
        }
    }

}

我不知道为什么会出现这个错误,有人有解决办法吗?

问候

【问题讨论】:

  • 在persist之前var_dump($logs);的结果是什么?

标签: symfony doctrine persist


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-16
    • 1970-01-01
    • 2013-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-17
    相关资源
    最近更新 更多