Doctrine2 Paginator,getArrayResult

时间:2016-03-10 12:14:24

标签: symfony doctrine-orm pagination

我正在处理一个相当复杂的查询构建器(在存储库函数中),它正在使用许多东西,如partial c.{id,name,created}和一堆fetchjoins来尝试保持数据量和查询量下降。

但这还不够,但前端表示仍然是分页的,所以我想在需要时进行一些ajax调用来获取数据。

$qb = $this->createQueryBuilder('c')
  ->select('a whole bunch')
  ->join('many joins')
  ->setFirstResult(0)
  ->setMaxResults(10)

上述方法doesn't work for complex joins,我setMaxResults(10)得到2个结果,setMaxResults(1000)得到118个结果。 Doctrine建议使用他们的Pagination类,因为它将正确处理计数/迭代。

现在,如果我循环遍历new Paginator($query, true)提供的Iterator对象,那么一切正常,但调用存储库函数的代码希望从getArrayResult获取一个数组。

迭代器包含完整的实体对象,这意味着我必须重写所有服务以使用方法而不是数组键。

有没有办法将Paginator与ArrayResult一起使用?

1 个答案:

答案 0 :(得分:6)

Hydration Mode添加到您的查询中。

//Set query hydration mode
$query->setHydrationMode(\Doctrine\ORM\Query::HYDRATE_ARRAY);