kimono
@kimono
Web developer

Как налету сменить компонент базы данных в ActiveRecord YII2?

Есть один yii2-advanced и два сайта в нем. Файлы миграций общие и относятся к обоим сайтам.
В конфигурационном файле консольного приложения не указан компонент db, вместо него стоят db1 и db2.
Соответственно миграции запускаются так: yii migrate/up --db=db1 и yii migrate/up --db=db2.
Все работает, но(!): в одной из миграций создается пользователь по умолчанию:
if (!$email = ArrayHelper::getValue(Yii::$app->params, 'developerEmail')) {
  if (!$email = ArrayHelper::getValue(Yii::$app->params, 'supportEmail')) {
    throw new InvalidConfigException('App must have a developer or support email');
  }
}

$user = new User();
$user->email  = $email;
$user->status = User::STATUS_ACTIVE;
$user->role   = User::ROLE_DEVELOPER;
$user->setPassword('654321');
$user->generateAuthKey();
$user->save();

Здесь возникает ошибка, т.к. не указан компонент баз данных db, на который смотрит User(). По началу я считал, что указывая в миграции компонент db1yii migrate/up --db=db1 приложение работает с этой базой, но видимо нет.
Подскажите почему так, и как "на лету" сменить значение $user->getDb().
  • Вопрос задан
  • 303 просмотра
Решения вопроса 1
kimono
@kimono Автор вопроса
Web developer
Хех, решил. Если кому-то интересно:
if (!$email = ArrayHelper::getValue(Yii::$app->params, 'developerEmail')) {
  if (!$email = ArrayHelper::getValue(Yii::$app->params, 'supportEmail')) {
    throw new InvalidConfigException('App must have a developer or support email');
  }
}

// нужно добавить компонент db используя текущую базу
Yii::$app->setComponents([
  'db' => $this->getDb(),
]);

$user = new User();
$user->email = $email;
$user->status = User::STATUS_ACTIVE;
$user->role = User::ROLE_DEVELOPER;
$user->setPassword('654321');
$user->generateAuthKey();
$user->save();
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы