/** * Gets all tags for the given taggable resource * * @param BaseTaggable $resource Taggable resource * @return array */ public function getTagging(BaseTaggable $resource) { $em = $this->em; $config = $em->getConfiguration(); if (is_null($config->getCustomHydrationMode(self::TAGGING_HYDRATOR))) { $config->addCustomHydrationMode(self::TAGGING_HYDRATOR, 'Doctrine\\ORM\\Internal\\Hydration\\ObjectHydrator'); } return $em->createQueryBuilder()->select('t')->from($this->tagClass, 't')->innerJoin('t.tagging', 't2', Expr\Join::WITH, 't2.resourceId = :id AND t2.resourceType = :type')->setParameter('id', $resource->getTaggableId())->setParameter('type', $resource->getTaggableType())->getQuery()->getResult(self::TAGGING_HYDRATOR); }
/** * Deletes all tagging records for the given taggable resource * * @param Taggable $resource Taggable resource */ public function deleteTagging(Taggable $resource) { $taggingList = $this->em->createQueryBuilder()->select('t')->from($this->taggingClass, 't')->where('t.resourceType = :type')->setParameter('type', $resource->getTaggableType())->andWhere('t.resourceId = :id')->setParameter('id', $resource->getTaggableId())->getQuery()->getResult(); foreach ($taggingList as $tagging) { $this->em->remove($tagging); } }
/** * Sets the resource * * @param Taggable $resource Resource to set */ public function setResource(Taggable $resource) { $this->resourceType = $resource->getTaggableType(); $this->resourceId = $resource->getTaggableId(); }