Эх сурвалжийг харах

Optimize fetching of all package info

Jordi Boggiano 13 жил өмнө
parent
commit
b2b6e7a1cf

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

@@ -30,7 +30,7 @@ class ApiController extends Controller
     {
         $packages = $this->get('doctrine')
             ->getRepository('Packagist\WebBundle\Entity\Package')
-            ->findAll();
+            ->getFullPackages();
 
         $data = array();
         foreach ($packages as $package) {

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

@@ -65,6 +65,21 @@ class PackageRepository extends EntityRepository
         return $qb->getQuery()->getSingleResult();
     }
 
+    public function getFullPackages()
+    {
+        $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');
+
+        return $qb->getQuery()->getResult();
+    }
+
     public function findByTag($name)
     {
         return $this->getBaseQueryBuilder()