public function saveTagging(BaseTaggable $resource) { $tags = clone $resource->getTags(); parent::saveTagging($resource); if (sizeof($tags) !== sizeof($resource->getTags())) { // parent::saveTagging uses getTags by reference and removes elements, so it ends up empty :-/ // this causes all tags to be deleted when an entity is persisted more than once in a request // Restore: $this->replaceTags($tags->toArray(), $resource); } }
/** * Returns an array of tag names for the given Taggable resource. * * @param Taggable $resource Taggable resource */ public function getTagNames(Taggable $resource) { $names = array(); if (sizeof($resource->getTags()) > 0) { foreach ($resource->getTags() as $tag) { $names[] = $tag->getName(); } } return $names; }