diff options
Diffstat (limited to 'src/Wallabag/CoreBundle/Repository/EntryRepository.php')
-rw-r--r-- | src/Wallabag/CoreBundle/Repository/EntryRepository.php | 44 |
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; | |||
5 | use Doctrine\ORM\EntityRepository; | 5 | use Doctrine\ORM\EntityRepository; |
6 | use Pagerfanta\Adapter\DoctrineORMAdapter; | 6 | use Pagerfanta\Adapter\DoctrineORMAdapter; |
7 | use Pagerfanta\Pagerfanta; | 7 | use Pagerfanta\Pagerfanta; |
8 | use Wallabag\CoreBundle\Entity\Tag; | ||
8 | 9 | ||
9 | class EntryRepository extends EntityRepository | 10 | class 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 | } |