我花了3个小时尝试在社交网络上分享PostPersist callback
上的一些链接。但是,这些链接在社交网络页面上给了我404 error
。我只是找出了我冲洗后的回调时实际上并不存在的数据。但是,在entity->flush()
之后的控制器中,我使用了相同的代码,然后链接正常工作。
我想知道,为什么人们确切使用
/**
* @ORMPostPersist
*/
回调。
来自Doctrine2文档:
partpersist-在实体持续存在之后,实体发生后期事件。它将在数据库插入操作之后调用。生成的主要钥匙值可在Pertpersist事件中可用。
,但我们必须考虑默认情况下,默认情况下,Doctrine2拨打交易。在此方法中,当您在实体管理器上使用flush()时,交易结束。这就是为什么除非刷新实体管理器,否则您将无法在数据库中看到数据的原因。EntityManager#flush()是交易开始和结束的地方。尽管如此,我们也有可能明确调用事务,但它也不会让您在启动事务,坚持对象和提交事务之间的数据库中查看数据。
实际上,您不能省略Doctrine2中的交易,因此您不能期望在发生后世事件发生时持续行动后可以看到数据。
要实现您必须使用Postflush事件。
我的现实生活经历中的斯托斯特医师例如:
- 创建取决于创建对象的数据(即自动翻译,自动日期,某些特定关系更新)
- 向其他事件发送通知
- 发送电子邮件
我希望这会有所帮助。
编辑
查看onFlush
事件的示例,您可以在其中看到如何穿越工作单位以获取对象的示例。onflush示例
仅在特定对象上工作:
if ($entity instanceof Product) {
// do something with the YourEntityName
}