public function afterSave() { if (!$this->owner->isNewRecord) { $this->beforeDelete(); } if (count($this->_tags)) { $tagAssigns = []; $modelClass = get_class($this->owner); foreach ($this->_tags as $name) { if (!($tag = Tag::findOne(['name' => $name]))) { $tag = new Tag(['name' => $name]); } $tag->frequency++; if ($tag->save()) { $updatedTags[] = $tag; $tagAssigns[] = [$modelClass, $this->owner->primaryKey, $tag->id]; } } if (count($tagAssigns)) { Yii::$app->db->createCommand()->batchInsert(TagAssign::tableName(), ['class', 'item_id', 'tag_id'], $tagAssigns)->execute(); $this->owner->populateRelation('tags', $updatedTags); } } }