瀏覽代碼

Merge pull request #87 from stof/optimize_queries

Optimized the queries for the package view
Nils Adermann 13 年之前
父節點
當前提交
b8d1bef055

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

@@ -219,7 +219,7 @@ class WebController extends Controller
         try {
             $package = $this->getDoctrine()
                 ->getRepository('PackagistWebBundle:Package')
-                ->findOneByName($name);
+                ->getFullPackageByName($name);
         } catch (\Doctrine\ORM\NoResultException $e) {
             return $this->redirect($this->generateUrl('search', array('q' => $name, 'reason' => 'package_not_found')));
         }

+ 16 - 0
src/Packagist/WebBundle/Entity/PackageRepository.php

@@ -49,6 +49,22 @@ class PackageRepository extends EntityRepository
         return $qb->getQuery()->getSingleResult();
     }
 
+    public function getFullPackageByName($name)
+    {
+        $qb = $this->getBaseQueryBuilder()
+            ->addSelect('a', 'req', 'rec', 'sug', 'rep', 'con', 'pro')
+            ->leftJoin('v.authors', 'a')
+            ->leftJoin('v.require', 'req')
+            ->leftJoin('v.recommend', 'rec')
+            ->leftJoin('v.suggest', 'sug')
+            ->leftJoin('v.replace', 'rep')
+            ->leftJoin('v.conflict', 'con')
+            ->leftJoin('v.provide', 'pro')
+            ->where('p.name = ?0')
+            ->setParameters(array($name));
+        return $qb->getQuery()->getSingleResult();
+    }
+
     public function findByTag($name)
     {
         return $this->getBaseQueryBuilder()