所以我实现了dojo.store.jsonRest的分页以用作 dojox.grid.DataGrid 中的存储。在使用Symfony 2和 ORM Doctrine的服务器中,我是这两个框架的新手。
对于 Dojo jsonRest,服务器的响应必须有一个包含结果偏移量、限制和记录总数(无限制)的标头Content-Range。
因此,对于带有Content-Range: items 0-24/66标头的响应,如果用户将网格记录滚动到第24 行,它将发出带有Range: 24-66标头的异步请求,然后是响应标头应该有一个Content-Range: items 24-66/66。这样做是为了让 Dojo 可以知道它可以对分页数据发出多少请求,以及呈现和后续请求的记录范围。
所以我的问题是,要获得没有限制的记录总数,我必须使用具有偏移量和限制的相同查询进行COUNT查询。我不喜欢这个。
我想知道是否有一种方法可以在不进行两次查询的情况下获得总计数和有限结果。
public function getByTextCount($text)
{
$dql = "SELECT COUNT(s.id) FROM Bundle:Something s WHERE s.text LIKE :text";
$query = $this->getEntityManager()->createQuery($dql);
$query->setParameter('text', '%'.$text.'%');
return $query->getSingleScalarResult();
}
-
public function getByText($text, $offset=0, $limit=24)
{
$dql = "SELECT r FROM Bundle:Something s WHERE s.text LIKE :text";
$query = $this->getEntityManager()->createQuery($dql);
$query->setParameter('text', '%'.$text.'%');
$query->setFirstResult($offset);
$query->setMaxResults($limit);
return $query->getArrayResult();
}