Browse Source

Optimize queries a bit

Jordi Boggiano 14 years ago
parent
commit
30f5feed38

+ 1 - 1
src/Packagist/WebBundle/Controller/WebController.php

@@ -44,7 +44,7 @@ class WebController extends Controller
     public function indexAction()
     public function indexAction()
     {
     {
         $packages = $this->getDoctrine()
         $packages = $this->getDoctrine()
-            ->getRepository('Packagist\WebBundle\Entity\Package')
+            ->getRepository('PackagistWebBundle:Package')
             ->findAll();
             ->findAll();
 
 
         return array('packages' => $packages, 'page' => 'home');
         return array('packages' => $packages, 'page' => 'home');

+ 19 - 5
src/Packagist/WebBundle/Entity/PackageRepository.php

@@ -30,16 +30,30 @@ class PackageRepository extends EntityRepository
         return $qb->getQuery()->getResult();
         return $qb->getQuery()->getResult();
     }
     }
 
 
+    public function findAll()
+    {
+        return $this->getBaseQueryBuilder()->getQuery()->getResult();
+    }
+
     public function findByTag($name)
     public function findByTag($name)
     {
     {
-        $qb = $this->getEntityManager()->createQueryBuilder();
-        $qb->select('p, v, t')
-            ->from('Packagist\WebBundle\Entity\Package', 'p')
-            ->leftJoin('p.versions', 'v')
-            ->leftJoin('v.tags', 't')
+        $qb = $this->getBaseQueryBuilder()
+            // eliminate tags from the select, otherwise only $name is visible in the results' tags
+            ->select('p, v, m')
             ->where('t.name = ?0')
             ->where('t.name = ?0')
             ->groupBy('p.id')
             ->groupBy('p.id')
             ->setParameters(array($name));
             ->setParameters(array($name));
         return $qb->getQuery()->getResult();
         return $qb->getQuery()->getResult();
     }
     }
+
+    private function getBaseQueryBuilder()
+    {
+        $qb = $this->getEntityManager()->createQueryBuilder();
+        $qb->select('p, v, t, m')
+            ->from('Packagist\WebBundle\Entity\Package', 'p')
+            ->leftJoin('p.versions', 'v')
+            ->leftJoin('p.maintainers', 'm')
+            ->leftJoin('v.tags', 't');
+        return $qb;
+    }
 }
 }