【发布时间】:2014-08-24 06:11:24
【问题描述】:
所以我有一个复杂的实体,其中包含一些由 OneToManys 和 ManyToManys 管理的子实体。
使用基本的 setMaxResults() 和 setFirstResult() 方法返回的结果数量少于所需数量(执行可运行查询时,我返回了我设定的结果限制,但是 Doctrine 然后修剪了重复记录并仅返回唯一记录)。通过stackoverflow,我遇到了Paginator Doctrine Tool 类。
我遇到的问题是我需要缓存结果。我使用 Doctrine 的 ApcCache 接口,但是当我尝试将其保存到缓存时,我得到了Exception: Serialization of 'Closure' is not allowed。但是 Paginator 类似乎不允许我获取查询的结果(只有 10 个)。很明显,当我这样做时:
$results = new Paginator($query, $fetchJoin = true);
return $results->getQuery()->getResult();
我回到了最初的问题,即获得的记录数少于我想要的限制(因为现在我们要回到获取结果的原始方法)
我只想要结果数组,所以我可以序列化和缓存它。这样做的最佳方法是什么?
谢谢
编辑
现在,我正在添加一个 foreach 循环并将记录收集到一个数组中。这似乎可行,但我想知道是否有更好的方法来处理这个问题,而不是在我的每个 Repository 方法中添加另一个循环......
$results = new Paginator($query, $fetchJoin = true);
$return = [];
foreach($results as $result) {
$return[] = $result;
}
$cache->save($cacheKey, $return, 300);
return $return;
【问题讨论】:
标签: php symfony caching doctrine-orm pagination