PHP Classes

File: vendor/doctrine/orm/docs/en/tutorials/pagination.rst

Recommend this page to a friend!
  Classes of Murat Cileli  >  Papernic  >  vendor/doctrine/orm/docs/en/tutorials/pagination.rst  >  Download  
File: vendor/doctrine/orm/docs/en/tutorials/pagination.rst
Role: Example script
Content type: text/plain
Description: Example script
Class: Papernic
Manage documents colaboratively
Author: By
Last change:
Date: 1 year ago
Size: 1,577 bytes


Class file image Download

.. versionadded:: 2.2

Starting with version 2.2 Doctrine ships with a Paginator for DQL queries. It
has a very simple API and implements the SPL interfaces ``Countable`` and

.. code-block:: php

use Doctrine\ORM\Tools\Pagination\Paginator;

$dql = "SELECT p, c FROM BlogPost p JOIN p.comments c";
$query = $entityManager->createQuery($dql)

$paginator = new Paginator($query, $fetchJoinCollection = true);

$c = count($paginator);
    foreach (
$paginator as $post) {
$post->getHeadline() . "\n";

Paginating Doctrine queries is not as simple as you might think in the
. If you have complex fetch-join scenarios with one-to-many or
many-to-many associations using the "default" LIMIT functionality of database
vendors is not sufficient to get the correct results

By default the pagination extension does the following steps to compute the
correct result

Perform a Count query using `DISTINCT` keyword.
Perform a Limit Subquery with `DISTINCT` to find all ids of the entity in from on the current page.
Perform a WHERE IN query to get all results for the current page.

This behavior is only necessary if you actually fetch join a to-many
. You can disable this behavior by setting the
``$fetchJoinCollection`` flag to ``false``; in that case only 2 instead of the 3 queries
described are executed
. We hope to automate the detection for this in
the future