Entity/DocumentTagRepository.php
changeset 5 45378793512a
parent 2 13f43f53d0ba
child 8 7d2fb5d7c9ff
--- a/Entity/DocumentTagRepository.php	Mon Oct 17 17:17:14 2011 +0200
+++ b/Entity/DocumentTagRepository.php	Tue Oct 18 10:32:30 2011 +0200
@@ -2,7 +2,12 @@
 
 namespace IRI\Bundle\WikiTagBundle\Entity;
 
+use Doctrine\ORM\Query;
+
+use Doctrine\ORM\QueryBuilder;
+
 use Doctrine\ORM\EntityRepository;
+use Doctrine\ORM\NoResultException;
 
 /**
  * DocumentTagRepository
@@ -18,8 +23,8 @@
     public function findOrderedTagsForDoc($doc_id)
     {
         return $this->getEntityManager()
-        ->createQuery("SELECT doctag FROM WikiTagBundle:DocumentTag doctag WHERE doctag.document=:doc_id ORDER BY doctag.tagOrder ASC")
-        ->setParameter("doc_id", $doc_id)
+        ->createQuery("SELECT doctag FROM WikiTagBundle:DocumentTag doctag JOIN doctag.document doc WHERE doc.externalId=:doc_id ORDER BY doctag.tagOrder ASC")
+        ->setParameter("doc_id", strval($doc_id))
         ->getResult();
     }
     
@@ -29,9 +34,53 @@
     public function getMaxOrder($doc_id)
     {
         return $this->getEntityManager()
-        ->createQuery("SELECT MAX(doctag.tagOrder) FROM WikiTagBundle:DocumentTag doctag  WHERE doctag.document= :doc_id")
-        ->setParameter("doc_id", $doc_id)
+        ->createQuery("SELECT MAX(doctag.tagOrder) FROM WikiTagBundle:DocumentTag doctag JOIN doctag.document doc WHERE doc.externalId= :doc_id")
+        ->setParameter("doc_id", strval($doc_id))
         ->getResult();
     }
     
+    
+    /**
+     *
+     * Enter description here ...
+     * @param unknown_type $external_id
+     * @param array $filter_array
+     * @return QueryBuilder
+     */
+    private function createQueryBuilderByDocumentExternalId($external_id, array $filter_array=null) {
+        $qb = $this->createQueryBuilder("dt")
+        ->join('dt.document', 'd')
+        ->where('d.externalId = :external_id');
+
+        $params = array("external_id"=>strval($external_id));
+        
+        if(!is_null($filter_array)) {
+            foreach ($filter_array as $key => $value) {
+                $qb = $qb->where("dt.$key = :p_$key");
+                $params["p_$key"] = $value;
+            }
+        }
+        
+        $qb = $qb->setParameters($params);
+        
+        return $qb;
+    }
+    
+    public function findByDocumentExternalId($external_id, array $filter_array=null)
+    {
+        $qb = $this->createQueryBuilderByDocumentExternalId($external_id, $filter_array);
+        return $qb->getQuery()->getResult();
+    }
+    
+    public function findOneByDocumentExternalId($external_id, array $filter_array=null) {
+        
+        $qb = $this->createQueryBuilderByDocumentExternalId($external_id, $filter_array)->setMaxResults(1);
+        
+        try {
+            return $qb->getQuery()->getSingleResult();
+        } catch (NoResultException $e) {
+            return null;
+        }
+    }
+    
 }
\ No newline at end of file