强制原则总是刷新

问题描述:

我有一个脚本,使用原则从数据库中提取数据。有时它需要为同一实体获取数据,但是它第二次使用标识映射,因此可能与数据库不同步(另一个进程可以修改数据库中的实体)。我们尝试的一种解决方案是在运行DQL查询之前设置查询提示Query::HINT_REFRESH。然而,我们也想用它调用简单的findBy(..),但这似乎不起作用?我们还希望能够在每个进程中对其进行全局设置,以便在该上下文中运行的所有Doctrine SELECT查询将实际从数据库中提取实体。我们试图设置$em->getConfiguration()->setDefaultQueryHint(Query::HINT_REFRESH, true);,但又似乎不起作用?强制原则总是刷新

+0

几种可能的方法,但是如果数据库在查询后发生了变化,您希望发生什么?假设你需要对这些数据做些什么,但是在查询和你使用它的任何事情之间它可能会失效。 – Cerad

+0

如果数据在实际处理过程中发生了变化,那么它就可以。当我找到我希望得到存储在数据库中的实际状态。 – roinir

+0

这是一种长时间运行的过程吗?不清楚为什么要在查询之间进行更改,但查询后数据更改没问题。在每个查询之前,可能需要一个简单的$ entityManager-> clear()。 – Cerad

Doctrine explicitly warns you它不意味着没有缓存使用。

但是,如果要忽略这一点,那么Cerad的评论(在in this answer中也提到)听起来没错。如果你想在每个查询中都这么做,虽然你可能会考虑挂钩doctrine event,但不幸的是,preLoad没有任何事件,只有postLoad,但如果你真的不关心性能,你可以创建一个postLoad监听器,它首先获取类和实体的ID,在实体管理器上调用clear,最后重新加载它。听起来对我来说是非常错误的,但我洗了手:-)