为什么在Symfony学说中使用突破



我花了3个小时尝试在社交网络上分享PostPersist callback上的一些链接。但是,这些链接在社交网络页面上给了我404 error。我只是找出了我冲洗后的回调时实际上并不存在的数据。但是,在entity->flush()之后的控制器中,我使用了相同的代码,然后链接正常工作。

我想知道,为什么人们确切使用

/**
* @ORMPostPersist
*/

回调。

来自Doctrine2文档:

partpersist-在实体持续存在之后,实体发生后期事件。它将在数据库插入操作之后调用。生成的主要钥匙值可在Pertpersist事件中可用。

,但我们必须考虑默认情况下,默认情况下,Doctrine2拨打交易。在此方法中,当您在实体管理器上使用flush()时,交易结束。这就是为什么除非刷新实体管理器,否则您将无法在数据库中看到数据的原因。EntityManager#flush()是交易开始和结束的地方。尽管如此,我们也有可能明确调用事务,但它也不会让您在启动事务,坚持对象和提交事务之间的数据库中查看数据。

实际上,您不能省略Doctrine2中的交易,因此您不能期望在发生后世事件发生时持续行动后可以看到数据。

要实现您必须使用Postflush事件。

我的现实生活经历中的斯托斯特医师例如:

  1. 创建取决于创建对象的数据(即自动翻译,自动日期,某些特定关系更新)
  2. 向其他事件发送通知
  3. 发送电子邮件

我希望这会有所帮助。

编辑
查看onFlush事件的示例,您可以在其中看到如何穿越工作单位以获取对象的示例。onflush示例

仅在特定对象上工作:

if ($entity instanceof Product) {
        // do something with the YourEntityName
}

相关内容

  • 没有找到相关文章

最新更新