2015-04-11 6 views
0

Я пытаюсь понять Zend Paginator и в основном хотел бы убедиться, что он не сломает мои скрипты.Zend 2 Paginator как он работает?

Например, у меня есть следующий фрагмент кода, который успешно загружает некоторые контакты по одному:

$offset = 1; 
//returns a paginator instance using a dbSelect; 
$contacts = $ContactsMapper->fetchAll($fetchObj); 

$contacts->setCurrentPageNumber($offset); 
$contacts->setItemCountPerPage(1); 

$allContacts = count($contacts); 
while($allContacts >= $offset) { 
    foreach($contacts as $contact) { 
     //do something 
    } 
    $offset++; 
    $contacts->setCurrentPageNumber($offset); 
    $contacts->setItemCountPerPage(1); 
} 

Однако я могу иметь сотни тысяч контактов в базе данных и подкреплялись SELECT я посылаю к Paginator. Могу ли я быть уверенным, что он загружает только по одному в этом примере? И как он это делает, выполняет ли он индивидуальный запрос с limit и offset?

ответ

1

Из официальной документации: Zend Paginator Usage

Примечание


Вместо выбора каждой соответствующей строки данного запроса, DbSelect адаптер извлекает только наименьшее количество данных, необходимых для отображение текущей страницы. Из-за этого второй запрос - это , динамически генерируемый для определения общего количества совпадающих строк.

Если вы используете Zend\Paginator\Adapter\DbSelect он будет применять limitoffset и к запросу вы передаете его, и он просто будет получать разыскиваемую запись. Это делается в функции getItems() от DbSelect, вы можете видеть, что these lines в исходном коде.

Вы также можете прочитать в документации:

Этот адаптер делает не выборки всех записей из базы данных, чтобы сосчитать их. Вместо этого адаптер управляет исходным запросом до , выдает соответствующий запрос COUNT. Затем Paginator выполняет этот запрос для получения количества строк. COUNT. Для этого требуется дополнительная обратная связь с базой данных, но это во много раз быстрее, чем , получая полный набор результатов и используя count(), особенно с большими коллекциями данных.

Смежные вопросы