Ver Fonte

Simplify controller code, remove duplicate packages in tag results

Jordi Boggiano há 14 anos atrás
pai
commit
d48a1baa9e

+ 4 - 14
src/Packagist/WebBundle/Controller/WebController.php

@@ -122,20 +122,10 @@ class WebController extends Controller
      */
     public function tagAction($name)
     {
-        $tag = $this->getDoctrine()
-            ->getRepository('PackagistWebBundle:Tag')
-            ->findOneByName($name);
-        if (empty($tag)) {
-            throw new NotFoundHttpException();
-        }
-
-        $versions = $tag->getVersions();
-
-        foreach($versions as $version) {
-            $packages[] = $version->getPackage();
-        }
-
-        return array('packages' => $packages, 'page' => 'home');
+        $packages = $this->getDoctrine()
+            ->getRepository('PackagistWebBundle:Package')
+            ->findByTag($name);
+        return array('packages' => $packages, 'tag' => $name);
     }
 
     /**

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

@@ -29,4 +29,17 @@ class PackageRepository extends EntityRepository
             ->setParameters(array(new \DateTime('-1hour')));
         return $qb->getQuery()->getResult();
     }
+
+    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')
+            ->where('t.name = ?0')
+            ->groupBy('p.id')
+            ->setParameters(array($name));
+        return $qb->getQuery()->getResult();
+    }
 }