Symfony 未更新事件订阅服务器PositUpdate查询

Symfony 未更新事件订阅服务器PositUpdate查询,symfony,doctrine-orm,symfony-2.3,Symfony,Doctrine Orm,Symfony 2.3,我试图比较升级前后数据库中的数据,以便执行操作 具体而言: 协会:艺术家许多原声带 当我通过录音带删除艺术家时,我检查该艺术家是否没有关联,如果为true,则删除该艺术家 public function postUpdate(LifecycleEventArgs $args) { $entity = $args->getEntity(); $em = $args->getEntityManager(); if ($entity instanceof Soun

我试图比较升级前后数据库中的数据,以便执行操作

具体而言:

协会:艺术家许多原声带

当我通过录音带删除艺术家时,我检查该艺术家是否没有关联,如果为true,则删除该艺术家

public function postUpdate(LifecycleEventArgs $args)
{
    $entity = $args->getEntity();
    $em = $args->getEntityManager();

    if ($entity instanceof Soundtrack) {
        //$this->difference contains the difference between the artists before and the artists after the change.
        if(!empty($this->difference)) {
            foreach($this->difference as $m) {
                $art = $em->getRepository('AcmeUserBundle:Artist')->findArtistByIdJoinSoundtrack($m);
                var_dump($art->getId());

            }
        }
    }
}
查询findArtistByIdJoinSoundtrack():

public function findArtistByIdJoinSoundtrack($id) {
    $qb = $this->createQueryBuilder('a');
         $query = $qb->select(array('partial a.{id}'))
                 ->innerJoin('a.soundtrack', 's')
                 ->where('a.id = :id')
                 ->setParameter('id', $id)
                 ->setMaxResults(1)
                 ->getQuery();

         return $query->getSingleResult();
}
当我运行一个查询以查看艺术家是否没有关联时,问题就出现了,事实上,在postUpdate中查询:

$em->getRepository('AcmeUserBundle:Artist')->findArtistByIdJoinSoundtrack($m);
例如,如果一个艺术家与id为71的配乐只有一个关联 我刚刚从id为71的配乐中删除了那个艺术家,这个查询不会返回一个空的响应,而是返回一个id为71的元素配乐

换句话说,即使使用了flush()之后调用的事件postUpdate,数据库仍然没有更新

为什么会发生这种情况

我还清除了缓存几次,以确保它不是问题所在

请看一看。通常,不允许使用预更新侦听器更改相关实体。你的想法

在flush()之后调用[…]事件postUpdate[…]

。。。不完全正确-在flush()之后不调用,而在内部调用

在EntityManager#flush()中调用三个post[postUpdate、postRemove、postPersist]事件。变化 在这里,它们与数据库中的持久性无关

()