Ver Mensaje Individual
  #5 (permalink)  
Antiguo 15/10/2011, 19:27
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

Hola

Parece que ahora con DoctrineExtensions funciona bien, el tema está en "GROUP BY" (me parece, soy novato)

con este código que se encuentra en Repository/BlogRepository.php

Código:
$qb = $this->createQueryBuilder('b')
           ->select('b, c')
           ->leftJoin('b.comments', 'c')
           ->groupBy('b')
           ->addOrderBy('b.created', 'DESC');

           if (false === is_null($limit))
                $qb->setMaxResults($limit);
quitando el "groupBy" no funciona bien el límite, en lugar de 4 resultados (ej.) devolvía 3, y asi con otros números para $limit.
supongo que es por el leftJoin.

con "groupBy('b')" funciona el límite, pero como decía antes la cantidad de blog.comments si era mayor que 0, siempre quedaba en 1.


Con la nueva extensión no puedo usar el código en BlogRepository.php, o no se como hacerlo.
Anteriormente tenía un problema con $this->createQueryBuilder('b'), parece la función de paginate esperaba un objecto Query en lugar de QueryBuilder

entonces lo implementé en el controller directamente
así


Código:
    public function indexAction()
    {
        $em = $this->getDoctrine()
                   ->getEntityManager();


        $qb = $em->createQuery('SELECT b, c FROM BloggerBlogBundle:Blog b LEFT JOIN b.comments c');

        
            $count = Paginate::getTotalQueryResults($qb); // Step 1
            $paginateQuery = Paginate::getPaginateQuery($qb, 0, 3); // Step 2 and 3
        
        
        $latestBlogs = $paginateQuery->getResult();
        

        return $this->render('BloggerBlogBundle:Page:index.html.twig', array(
            'blogs' => $latestBlogs
        ));
    }
y funciona bien, antes no había funcionado porque había agregado "GROUP BY b" en la consulta


Una pregunta: es posible obtener la query en BlogRepository , como lo estaba haciendo antes?

gracias de nuevo, y disculpas si esto es confuso