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('Не удалось сохранить тег'); } } }