php - 持久化新实体 onFlush

标签 php doctrine-orm doctrine

我尝试使用 onFlush Doctrine 中的事件以持久化一个新实体,但在尝试持久化时会导致无限循环。这是我在监听器中所做的:

$countusers = $em->getRepository('DankeForumBundle:NotificationUser')->countNotificationsByDeal($entity);
if ($countusers > 0) {
  $notification = new NotificationAction();
  $notification->setDeal($entity);
  $notification->setDatepost(new \DateTime());
  $notification->setNotificationtype(NotificationAction::TYPE_TOP_DEAL);
  // $em is set to EntityManager
  $em->persist($notification);
  // $uow ist set to UnitOfWork
  $uow->computeChangeSet($em->getClassmetadata('Danke\ForumBundle\Entity\NotificationAction'), $notification);
}
当我在 onFlush 中冲洗时,我知道我会得到一个循环。事件,但我不这样做!我只计算文档中所说的新更改集。
有人能说出问题出在哪里吗?

最佳答案

我对 onFlush 事件有类似的问题。请更换

$em->persist($notification);


$uow = $em->getUnitOfWork();
$uow->persist($notification);

$metadata = $em->getClassMetadata(get_class($notification));
$uow->computeChangeSet($metadata, $notification);
$uow->persist()将使 UnitOfWork 知道新实体并安排它插入。
调用 $uow->computeChangeSet()是必要的,以收集应由 Doctrine 的持久器插入的数据。

关于php - 持久化新实体 onFlush,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10796496/

相关文章:

php - 在 Laravel 中组合 AND/OR Eloquent 查询

php - 在 "anonymous"用户上存储数据

php - 如何从 Crawler filter() 获取单个值?

php - Silex SwiftMailer 在执行时不建立 SMTP 连接

php - PHP-MySQL 交互期间的编码不正确

php - Doctrine 集合 : difference between toArray() and getData()

php - Doctrine 在水合过程中添加了额外的查询,导致 "normal"一对一和自引用关系的 n+1 问题

php - Symfony 中的多重过滤

php - @OneToOne 的使用语句 - Doctrine2

php - 从 Doctrine 中获取实体数组/列表