public function beforeDelete() { foreach ($this->tagUserAccesses as $item) { $item->delete(); } ObjectTag::deleteAll(['tag_id' => $this->id]); return parent::beforeDelete(); }
/** * @return \yii\db\ActiveQuery */ public function getObjectTags() { return $this->hasMany(ObjectTag::className(), ['object_id' => 'id']); }
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('Не удалось сохранить тег'); } } }