Example #1
0
 private function saveTags()
 {
     if (!$this->isMy()) {
         return;
     }
     $tags = array_unique(explode(' ', $this->tags));
     // новые теги
     $oldTags = [];
     // уже имеющиеся теги
     foreach ($this->object->objectTags as $objectTag) {
         if (!in_array($objectTag->tag->name, $tags)) {
             // тег убран
             $objectTag->delete();
         } else {
             $oldTags[] = $objectTag->tag->name;
             // не будем создавать еще одну запись
         }
     }
     $tags = array_diff($tags, $oldTags);
     foreach ($tags as $tag) {
         // создаем записи для новых тегов
         $objectTag = new ObjectTag();
         $objectTag->tag_id = Tag::findByName($tag)->id;
         $objectTag->object_id = $this->object->id;
         if (!$objectTag->save()) {
             throw new Exception('Не удалось сохранить тег');
         }
     }
 }