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.php44
1 files changed, 44 insertions, 0 deletions
diff --git a/src/Wallabag/CoreBundle/Repository/EntryRepository.php b/src/Wallabag/CoreBundle/Repository/EntryRepository.php
index 57bf8024..ca71970b 100644
--- a/src/Wallabag/CoreBundle/Repository/EntryRepository.php
+++ b/src/Wallabag/CoreBundle/Repository/EntryRepository.php
@@ -5,6 +5,7 @@ namespace Wallabag\CoreBundle\Repository;
5use Doctrine\ORM\EntityRepository; 5use Doctrine\ORM\EntityRepository;
6use Pagerfanta\Adapter\DoctrineORMAdapter; 6use Pagerfanta\Adapter\DoctrineORMAdapter;
7use Pagerfanta\Pagerfanta; 7use Pagerfanta\Pagerfanta;
8use Wallabag\CoreBundle\Entity\Tag;
8 9
9class EntryRepository extends EntityRepository 10class EntryRepository extends EntityRepository
10{ 11{
@@ -179,4 +180,47 @@ class EntryRepository extends EntityRepository
179 ->getQuery() 180 ->getQuery()
180 ->getSingleResult(); 181 ->getSingleResult();
181 } 182 }
183
184 /**
185 * Remove a tag from all user entries.
186 *
187 * We need to loop on each entry attached to the given tag to remove it, since Doctrine doesn't know EntryTag entity because it's a ManyToMany relation.
188 * It could be faster with one query but I don't know how to retrieve the table name `entry_tag` which can have a prefix:
189 *
190 * DELETE et FROM entry_tag et WHERE et.entry_id IN ( SELECT e.id FROM entry e WHERE e.user_id = :userId ) AND et.tag_id = :tagId
191 *
192 * @param int $userId
193 * @param Tag $tag
194 */
195 public function removeTag($userId, Tag $tag)
196 {
197 $entries = $this->getBuilderByUser($userId)
198 ->innerJoin('e.tags', 't')
199 ->andWhere('t.id = :tagId')->setParameter('tagId', $tag->getId())
200 ->getQuery()
201 ->getResult();
202
203 foreach ($entries as $entry) {
204 $entry->removeTag($tag);
205 }
206
207 $this->getEntityManager()->flush();
208 }
209
210 /**
211 * Find all entries that are attached to a give tag id.
212 *
213 * @param int $userId
214 * @param int $tagId
215 *
216 * @return array
217 */
218 public function findAllByTagId($userId, $tagId)
219 {
220 return $this->getBuilderByUser($userId)
221 ->innerJoin('e.tags', 't')
222 ->andWhere('t.id = :tagId')->setParameter('tagId', $tagId)
223 ->getQuery()
224 ->getResult();
225 }
182} 226}