public function actionNormalize() { /** * @var $tag Tag */ $updated = 0; $deleted = 0; $list = []; foreach (Tag::find()->each() as $tag) { $name = mb_strtolower($tag->name); if (isset($list[$name])) { TagEvent::updateAll(['tag_id' => $list[$name]], ['tag_id' => $tag->id]); $tag->delete(); $deleted++; continue; } $list[$name] = $tag->id; } $this->stdout(Console::wrapText("- {$updated} updated, {$deleted} deleted", 10), Console::BOLD); $this->stdout("\n"); }
/** * @return EventQuery */ public function getTags() { return $this->hasMany(Tag::className(), ['id' => 'tag_id'])->indexBy('id')->viaTable(TagEvent::tableName(), ['event_id' => 'id']); }
/** * Отвязываем теги от элемента * @param $obj * @param array $keys * @return bool * @throws \yii\db\Exception */ public static function unbind($obj, array $tags) { /** * @var \common\models\Tag[] $existsTag */ $tags = static::filter($tags); $existsTag = []; if ($tags) { $existsTag = static::find()->where(['name' => $tags])->asArray()->all(); } if ($obj instanceof Event) { $cond = ['event_id' => $obj->id]; foreach ($existsTag as $ex) { $cond['tag_id'][] = $ex['id']; } if ($existsTag) { Yii::$app->db->createCommand('UPDATE tag SET popularity=popularity-1 WHERE id IN (' . implode(',', ArrayHelper::getColumn($existsTag, 'id')) . ') and popularity>0')->execute(); } TagEvent::deleteAll($cond); } }