4

I make a query via createBuilder() and when executing it (getQuery()->execute()->toArray()) I got 10946 elements. I want to paginate it, so I pass it to:

$paginator = new \Phalcon\Paginator\Adapter\QueryBuilder(array(
    "builder" => $builder,
    "limit" => $limit,
    "page" => $current_page
));

$limit is 25 and $current_page is 1, but when doing:

$paginator->getPaginate();

$page->total_items;

returns 1.

Is that a bug or am I missing something?

UPD: it seems like when counting items it uses created sql with limit. There is no difference what limit is, limit divided by items per page always equals 1. I might be mistaken.

UPD2: Colleague helped me to figure this out, the bug was in the query phalcon produces: count() of the group by counts grouped elements. So a workaround looks like:

$dataCount = $builder->getQuery()->execute()->count();
$page->next = $page->current + 1;
$page->before = $page->current - 1 > 0 ? $page->current - 1 : 1;
$page->total_items = $dataCount;
$page->total_pages = ceil($dataCount / 100);
$page->last = $page->total_pages;
4

1 回答 1

0

我知道这不是一个很好的答案,但这很可能是一个错误。Phalcon 的好人承担了一项庞大的工作,在他们的空闲时间里无法正常完成,而 PHQL、Volt 和其他大型但非核心组件之类的东西并没有像我们希望的那样受到关注。此外,鉴于过去 6 个月的大部分时间都花在了 v2 上,因此有近 500 个关于此类内容的错误,而且还在不断增加。我在 ORM、Volt、Validation 和 Session 方面遇到了相当多的问题,这最终让我坚持使用其他不那么酷但更成熟的解决方案。当 v2 发布时,我相信所有的注意力都会集中在错误列表和测试上,直到那时我们大部分时间都靠自己。鉴于现在都是 C,只有少数爱好者参与其中,v2 也将改变。

如果这是您遇到的唯一问题,最好的方法是更新您的查询以获取您自己需要的信息,而无需getPaginate().

于 2014-09-02T19:21:06.323 回答