Doctrine - 一次插入多个文档时,不会为所有文档触发postUpdate事件订阅者

时间:2017-04-20 07:16:56

标签: symfony doctrine-orm

我已经在symfony中使用postUpdate事件实现了doctrine事件订阅者。我正在尝试在postUpdate事件中打印我的文档ID。如果我插入单个文档,这样可以正常工作。当我尝试一次插入一组30个文档时出现问题。问题只是一个文件ID正在打印,虽然我一次插入30个文件。

以下是我已实施的代码。

services.yml

namespace KonnectEz\CoreBundle\Foundation\EventListener;
use Doctrine\Common\EventSubscriber;
use Doctrine\ORM\Events;
use KonnectEz\CoreBundle\Document\User;
use Doctrine\Common\Persistence\Event\LifecycleEventArgs;

class DoctrineSubscriber implements EventSubscriber {

    private $container = null;
    private $userHelperService = null;

    public function __construct($container) {
        $this->container = $container;
    }

    public function getSubscribedEvents() {
         return array(
            Events::postUpdate,
        );
    }


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

        if ($entity instanceof User) {
             error_log("Entity Id:".$entity->getId());
        }

    }
}

Doctrine event subscriber:

$totalEntitiesCount = sizeof($entities);
$entityCount = 0;
if ($entityCount == 30 || $entityCount == $totalEntitiesCount) {
     $dm->flush();
     $entityCount = 0;
}

我有一个函数,我一次在一组30个文档上刷新。那是

{{1}}

为什么没有为要插入的每个文档调用postUpdate事件? 我希望为每个插入的文档调用此事件。如何解决此问题?

1 个答案:

答案 0 :(得分:2)

更新实体的现有对象时会调用

postUpdate

如果您希望在插入后进行更改,请改为添加postPersistpostFlush事件。

您可以在此处找到有关学说事件的详细信息http://docs.doctrine-project.org/projects/doctrine-mongodb-odm/en/latest/reference/events.html(mongoDB版本)

此外,我还会在eventListener文件中使用断点打开x-debug,看看它是否被触发。