序列化Doctrine Paginator用于缓存目的

时间:2014-08-22 20:08:23

标签: php symfony caching doctrine-orm pagination

所以我有一个复杂的实体,有一些由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;

1 个答案:

答案 0 :(得分:0)

尝试iterator_to_array(),Doctrine Paginator实现了可遍历的接口http://php.net/manual/en/function.iterator-to-array.php