你好,我有一个onFlush监听器:
<?php
namespace FM\AppBundle\EventListener;
use FM\AdminBundle\Entity\Address\DeliveryAddress;
use Doctrine\ORM\Event\OnFlushEventArgs;
class DeliveryAddressListener
{
/**
* @param OnFlushEventArgs $args
*/
public function onFlush(OnFlushEventArgs $args)
{
$em = $args->getEntityManager();
$uow = $em->getUnitOfWork();
foreach ($uow->getScheduledEntityUpdates() as $entity) {
if ($entity instanceof DeliveryAddress) {
$this->addPostalToUser($entity, $args);
}
}
}
/**
* @param DeliveryAddress $deliveryAddress
* @param OnFlushEventArgs $args
*/
public function addPostalToUser(DeliveryAddress $deliveryAddress, OnFlushEventArgs $args)
{
$em = $args->getEntityManager();
$user = $deliveryAddress->getOwner();
$user->setPostalCode($deliveryAddress->getZipCode());
}
}
service.yml:
delivery_address.listener:
class: FM\AppBundle\EventListener\DeliveryAddressListener
tags:
- { name: doctrine.event_listener, event: onFlush }
我尝试将新的邮政编码设置给用户。但好像没有成功。
即使我添加了
$em->persist($user)
。我查看了这个文档:http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/events.html#onflush 但我不明白如何根据以下解释使其工作:
如果在 onFlush 中创建和持久化一个新实体,则仅调用 EntityManager # persist() 是不够的。您还必须执行额外的调用 $unitOfWork->computeChangeSet($classMetadata, $entity)。