我要检查的第一件事是你的setName函数实际上正在做一些事情($this-> name = $name...)如果它已经正常工作,则可以在 services.yml 上定义一个事件侦听器,该事件侦听器在调用 flush 时触发。
entity.listener:
class: YourName\YourBundle\EventListener\EntityListener
calls:
- [setContainer, ["@service_container"]]
tags:
- { name: doctrine.event_listener, event: onFlush }
然后定义实体列表
namespace YourName\YourBundle\EventListener;
use Doctrine\ORM\Event;
use Symfony\Component\DependencyInjection\ContainerAware;
class EntityListener extends ContainerAware
{
/**
* Gets all the entities to flush
*
* @param Event\OnFlushEventArgs $eventArgs Event args
*/
public function onFlush(Event\OnFlushEventArgs $eventArgs)
{
$em = $eventArgs->getEntityManager();
$uow = $em->getUnitOfWork();
//Insertions
foreach ($uow->getScheduledEntityInsertions() as $entity) {
# your code here for the inserted entities
}
//Updates
foreach ($uow->getScheduledEntityUpdates() as $entity) {
# your code here for the updated entities
}
//Deletions
foreach ($uow->getScheduledEntityDeletions() as $entity) {
# your code here for the deleted entities
}
}
}
如果您需要知道哪些实体正在更改,但在将它们保存到数据库后对它们执行一些操作,只需将更改的实体存储在私有数组中,然后定义一个 onFlush 事件,从数组中获取实体。
顺便说一句,要触发此类事件,您需要在实体上添加@ORM\HasLifecycleCallbacks。