Ver Mensaje Individual
  #10 (permalink)  
Antiguo 17/10/2011, 15:21
Avatar de punk567
punk567
 
Fecha de Ingreso: septiembre-2006
Ubicación: Montevideo
Mensajes: 265
Antigüedad: 18 años, 1 mes
Puntos: 5
Respuesta: LeftJoin + setMaxResults

Buenas, lo he resuelto de la siguiente manera, a lo mejor a alguien le puede servir, aunque seguramente haya una manera más eficaz.

Controller
Código:
    public function indexAction($page)
    {
        $latestBlogs = $this->getDoctrine()
                             ->getEntityManager()
                             ->getRepository('BloggerBlogBundle:Blog')
                             ->getLatestBlogs($page, 5 );

        return $this->render('BloggerBlogBundle:Page:index.html.twig', array(
                'blogs' => $latestBlogs
            ));
    }
Repository
Código:
    public function getLatestBlogs($page = 1, $limitPerPage = 5)
    {
        $dql = $this->getEntityManager()->createQuery('SELECT b, c FROM BloggerBlogBundle:Blog b LEFT JOIN b.comments c');
        //...
        $count = Paginate::getTotalQueryResults($dql); // Step 1
        
        if ( $page == 1 ) {
            $offset = 0;
        }
        if ( $page == 2 ) {
            $offset = 5;
        }        
              
        $paginateQuery = Paginate::getPaginateQuery($dql, $offset, $limitPerPage);
     
        return $paginateQuery->getResult();
    }
Routing
Código:
BloggerBlogBundle_homepage:
    pattern:  /{page}
    defaults: { _controller: BloggerBlogBundle:Page:index, page:1 }
    requirements:
        _method:  GET
Template
Código:
    <div>
        <a href="{{ path('BloggerBlogBundle_homepage', { 'page': 1 }) }}">1</a> || <a href="{{ path('BloggerBlogBundle_homepage', { 'page': 2 }) }}">2</a>
    </div>
He puesto el número de páginas a mano (1 y 2, con 5 resultados por página) supongo que con el total de resultados de la consulta, divido por el número de resultados por página a mostrar, se puede obtener la paginación de manera genérica

Saludos y gracias de nuevo masterpuppet