Необходимость определить какая СУБД используется возникает, когда требуется реализовать специфичный для той или иной СУБД функционал в условиях поддержки приложением работы c СУБД нескольких видов. Например, MySQL и PostgreSQL.
К сожалению, Yii даже в версии 2 не предоставляет штатного функционала для решения данной задачи. Но, этот недостаток можно сравнительно легко восполнить самостоятельно.
В Yii 2 информация о подключении к БД содержится в файле db.php в папке config. Вот его примерное содержание при использовании PostgreSQL:
1 2 3 4 5 6 7 |
return [ 'class' => 'yii\db\Connection', 'dsn' => 'pgsql:host=localhost;port=5432;dbname=tasktracker', 'username' => 'username', 'password' => 'password', 'charset' => 'utf8', ]; |
Обратите внимание на элемент массива под названием dsn. Он-то и содержит информацию о типе СУБД и ряде других основных параметрах подключения.
Получить этот элемент в любом месте приложения не сложно:
1 |
Yii::$app->getDb()->dsn |
Единственная проблема – все данные о подключении представлены в виде одной строки. Но, и этот вопрос не трудно решить, разобрав строку при помощи регулярного выражения.
Ниже представлен пример метода, который проверяет используется ли в качестве СУБД PostgreSQL.
1 2 3 4 5 6 7 8 |
private function isPostgreSQLdB($dsn) { if (preg_match('/(.+):/', $dsn, $match)) { return $match[1]=='pgsql'; } else { return false; } } |
Пример его использования:
1 2 3 |
if($this->isPostgreSQLdB(Yii::$app->getDb()->dsn)){ // Делаем что-то } |
Вышеприведённый метод в случае необходимости можно доработать для других СУБД. Например, для MySQL вместо «pgsql» будет «mysql», для Oracle «oci» и т.д.
Добавить комментарий