前段时间我问了几个关于Doctrine查询缓存的问题,因为它没有像我想要的那样工作。
关于为什么我的关系没有被缓存的问题:
Doctrine result cache not caching a query with a join
关于如何使用分离和合并来缓存关系的问题:
Doctrine detaching, caching, and merging
我不确定为什么我不早点这样做,但我刚刚启用了Doctrine的EchoSQLLogger
,我发现当我将实体合并回来时,每个页面都会进行三次查询。
我的帖子是user
,company
和privilege
,user
是其他两个的父母。当我第一次获得加入user
和company
的{{1}}时,我会在privilege
上运行detach
,然后将其放入user
。当我从缓存中获取时,我做了一个ApcCache
,它让我回到了merge
实体,其中所有的Doctrine魔法都完好无损。
问题是,当我致电user
时,它会查询merge
,user
,然后company
。这是privilege
应该如何工作的吗?
有没有办法在没有调用数据库的情况下缓存我的merge
实体并保持两个关系完好无损?
答案 0 :(得分:0)
对于将来阅读此内容的任何人(或我):
我最终解决了PHP Incomplete Class
问题,为每个实体执行单独的查询和缓存保存。例如我的问题中的用户/公司/特权困境。我缓存用户,缓存公司并覆盖$user['company']
及其结果,以及相同的权限。
这似乎有效,但认真。 Doctrine的缓存需要帮助。