所以我有一个复杂的实体,有一些由OneToManys和ManyToManys管理的子实体。
使用基本setMaxResults()
和setFirstResult()
方法返回的结果少于所需数量的结果(执行runnable查询时,我恢复了我的设置结果限制,但是有重复记录,其中有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;
答案 0 :(得分:0)
尝试iterator_to_array()
,Doctrine Paginator实现了可遍历的接口http://php.net/manual/en/function.iterator-to-array.php