DenisOgr
@DenisOgr
Developer

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

Мне нужно поднять миграцию для создания таблицы.
В таблице будет поле, которое будет внешним ключем для поля из другой базы данных.
Я фиксированно записал database1.field и все заработало.
Но мне нужно динамически.
Из модели я могу получить имя таблиц,

common\models\GoogleGroups::tableName();
но как получить имя базы данных из модели?
  • Вопрос задан
  • 5164 просмотра
Решения вопроса 1
private function getDsnAttribute($name, $dsn)
    {
        if (preg_match('/' . $name . '=([^;]*)/', $dsn, $match)) {
            return $match[1];
        } else {
            return null;
        }
    }

Использование в любом месте:
$this->getDsnAttribute('dbname', Yii::$app->getDb()->dsn);

Использование в модели:
$this->getDsnAttribute('dbname', static::getDb()->dsn);

$this->getDsnAttribute('dbname', ModelName::getDb()->dsn);

тогда функцию запихнуть в хелпер какой-нибудь, но если вам миграцию написать, тогда зачем вам модель?
В миграции:
$this->getDsnAttribute('dbname', $this->db->dsn);
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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