我正在处理一个相当复杂的查询构建器(在存储库函数中),它正在使用许多东西,如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一起使用?
答案 0 :(得分:6)
将Hydration Mode
添加到您的查询中。
//Set query hydration mode
$query->setHydrationMode(\Doctrine\ORM\Query::HYDRATE_ARRAY);