首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在postRemove或preRemove中将实体创建为“归档”

在postRemove或preRemove中将实体创建为“归档”
EN

Stack Overflow用户
提问于 2018-11-22 16:05:11
回答 1查看 215关注 0票数 0

上下文

我现在有和实体Request,它有一个Approval实体的集合。

我的目标是将批准从Request中删除后存档。

我试图让它在使用@preRemove@postRemove的事件侦听器中工作(尽管在postRemove事件中在数据库中工作是一种不好的做法,但为了它,我尝试了)。

问题

但我无法让它在这两种情况下工作,除非我只有一份记录可存档。只要我有两个记录,它就会抛出一个异常。

@postRemove exception -它尝试删除相同的Approval两次。

注意:未定义索引: 0000000061b600620000000079e76cab

@preRemove exception -它试图持久化一个空的ArchivedApproval

执行'INSERT INSERT tblArchivedApprovals (级别,RequestedOn,ApprovalStatus,ApproverComments,ApprovedOn,ApprovedAmount,ApproverID,RequestedBy,ApprovedBy,DeductionID)值(?,?)‘时发生异常: SQLSTATE 07002,0: MicrosoftCOUNT字段不正确或语法错误

@preRemove 查询:

代码语言:javascript
复制
INSERT INTO tblArchivedApprovals
    ([Level], RequestedOn, ApprovalStatus, ApproverComments, ApprovedOn, ApprovedAmount, ApproverID, RequestedBy, ApprovedBy, DeductionID)
VALUES
    (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)

Parameters: []

任何关于如何做到这一点的想法都将不胜感激。

编辑:,以下是请求的侦听器类:

代码语言:javascript
复制
<?php

namespace App\Entity\EventListener;

use App\Entity\Approval;
use App\Entity\ArchivedApproval;
use Doctrine\ORM\EntityManager;
use Doctrine\ORM\Event\LifecycleEventArgs;
use Doctrine\ORM\Mapping as ORM;

class ApprovalListener
{

    /**
     * Archive the approval(s) to the approval history before removing them
     *
     * @ORM\PostRemove
     *
     * @param Approval $approval
     * @param LifecycleEventArgs $event
     *
     * @return void
     * @throws \Doctrine\ORM\ORMException
     */
    public function postRemove(Approval $approval, LifecycleEventArgs $event): void
    {
        // Create and set values
        $archivedApproval = new ArchivedApproval();
        $archivedApproval->setDeductionRequest($approval->getDeductionRequest());
        $archivedApproval->setRequestedOn($approval->getRequestedOn());
        $archivedApproval->setRequestedBy($approval->getRequestedBy());
        $archivedApproval->setApprover($approval->getApprover());
        $archivedApproval->setLevel($approval->getLevel());

        if (null !== $approval->getStatus()) {
            $archivedApproval->setStatus($approval->getStatus());
            $archivedApproval->setApproverComments($approval->getApproverComments());
            $archivedApproval->setApprovedAmount($approval->getApprovedAmount());
            $archivedApproval->setApprovedBy($approval->getApprovedBy());
            $archivedApproval->setApprovedOn($approval->getApprovedOn());
        }

        // Save the approval history
        /** @var EntityManager $em */
        $em = $event->getEntityManager();
        $em->persist($archivedApproval);
        $em->flush($archivedApproval);
    }
    
}
EN

回答 1

Stack Overflow用户

发布于 2018-12-12 14:52:35

电流解(非最优)

到目前为止,我唯一的方法是将ArchivedApproval实体添加到Request实体的removeApproval函数中,但是我必须循环处理批准并逐个删除它们,而不是简单地调用$request->getApprovals()->clear();

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53434687

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档