aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/Wallabag/CoreBundle/Repository/EntryRepository.php
diff options
context:
space:
mode:
Diffstat (limited to 'src/Wallabag/CoreBundle/Repository/EntryRepository.php')
-rw-r--r--src/Wallabag/CoreBundle/Repository/EntryRepository.php25
1 files changed, 20 insertions, 5 deletions
diff --git a/src/Wallabag/CoreBundle/Repository/EntryRepository.php b/src/Wallabag/CoreBundle/Repository/EntryRepository.php
index ecc159fc..05f0e0ba 100644
--- a/src/Wallabag/CoreBundle/Repository/EntryRepository.php
+++ b/src/Wallabag/CoreBundle/Repository/EntryRepository.php
@@ -133,7 +133,7 @@ class EntryRepository extends EntityRepository
133 { 133 {
134 $qb = $this->createQueryBuilder('e') 134 $qb = $this->createQueryBuilder('e')
135 ->leftJoin('e.tags', 't') 135 ->leftJoin('e.tags', 't')
136 ->where('e.user =:userId')->setParameter('userId', $userId); 136 ->where('e.user = :userId')->setParameter('userId', $userId);
137 137
138 if (null !== $isArchived) { 138 if (null !== $isArchived) {
139 $qb->andWhere('e.isArchived = :isArchived')->setParameter('isArchived', (bool) $isArchived); 139 $qb->andWhere('e.isArchived = :isArchived')->setParameter('isArchived', (bool) $isArchived);
@@ -152,8 +152,23 @@ class EntryRepository extends EntityRepository
152 } 152 }
153 153
154 if ('' !== $tags) { 154 if ('' !== $tags) {
155 foreach (explode(',', $tags) as $tag) { 155 foreach (explode(',', $tags) as $i => $tag) {
156 $qb->andWhere('t.label = :label')->setParameter('label', $tag); 156 $entryAlias = 'e' . $i;
157 $tagAlias = 't' . $i;
158
159 // Complexe queries to ensure multiple tags are associated to an entry
160 // https://stackoverflow.com/a/6638146/569101
161 $qb->andWhere($qb->expr()->in(
162 'e.id',
163 $this->createQueryBuilder($entryAlias)
164 ->select($entryAlias . '.id')
165 ->leftJoin($entryAlias . '.tags', $tagAlias)
166 ->where($tagAlias . '.label = :label' . $i)
167 ->getDQL()
168 ));
169
170 // bound parameter to the main query builder
171 $qb->setParameter('label' . $i, $tag);
157 } 172 }
158 } 173 }
159 174
@@ -181,7 +196,7 @@ class EntryRepository extends EntityRepository
181 ->innerJoin('e.tags', 't') 196 ->innerJoin('e.tags', 't')
182 ->innerJoin('e.user', 'u') 197 ->innerJoin('e.user', 'u')
183 ->addSelect('t', 'u') 198 ->addSelect('t', 'u')
184 ->where('e.user=:userId')->setParameter('userId', $userId) 199 ->where('e.user = :userId')->setParameter('userId', $userId)
185 ; 200 ;
186 201
187 return $qb->getQuery()->getResult(); 202 return $qb->getQuery()->getResult();
@@ -323,7 +338,7 @@ class EntryRepository extends EntityRepository
323 { 338 {
324 $qb = $this->createQueryBuilder('e') 339 $qb = $this->createQueryBuilder('e')
325 ->select('count(e)') 340 ->select('count(e)')
326 ->where('e.user=:userId')->setParameter('userId', $userId) 341 ->where('e.user = :userId')->setParameter('userId', $userId)
327 ; 342 ;
328 343
329 return (int) $qb->getQuery()->getSingleScalarResult(); 344 return (int) $qb->getQuery()->getSingleScalarResult();