强迫学说永远刷新

时间:2016-10-03 18:01:44

标签: php symfony doctrine-orm

我有一个使用doctrine从数据库中获取数据的脚本。有时它需要获取同一实体的数据,但第二次它使用身份映射,因此可能与数据库不同步(另一个进程可以修改数据库中的实体)。我们尝试的一个解决方案是在运行DQL查询之前设置查询提示Query::HINT_REFRESH。但是,我们也希望将它用于简单的findBy(..)调用,但这似乎不起作用?我们还希望能够在每个进程中全局设置它,以便在该上下文中运行的所有doctrine SELECT查询实际上将从DB中获取实体。我们尝试设置$em->getConfiguration()->setDefaultQueryHint(Query::HINT_REFRESH, true);,但这似乎无法正常工作?

1 个答案:

答案 0 :(得分:0)

Doctrine explicitly warns you它不应该在没有缓存的情况下使用。

然而,如果想忽略这一点,那么Cerad的评论(在in this answer中也提到)听起来是正确的。如果您想在每个查询中执行此操作,但您可能会考虑挂钩到doctrine event,遗憾的是preLoad没有postLoad的事件,只有clear,但如果你真的没有&#39}。关心性能你可以创建一个postLoad监听器,它首先获取加载实体的类和id,在实体管理器上调用ALTER TABLE 0_value_addition_setup DROP INDEX value_code ,最后重新加载它。听起来对我来说非常不对,我洗了手: - )