Laravel无法使用DB :: getDatabaseName()获得正确的数据库名称

时间:2019-04-17 13:57:14

标签: php laravel

我正在与许多公司创建一个Web应用程序,每个公司都有一个数据库,因此我需要不断更改数据库,可以在auth提供程序上轻松地进行操作,但是我有一些不需要身份验证的外部链接

我与一个类进行动态连接

class DatabaseConnection {

    public static function setConnection($env_connection)
    {
        $env_connection = strtoupper($env_connection);

        config(['database.connections.mysql' => [
            'driver'   => 'mysql',
            'host'     => env("DB_{$env_connection}_HOST"),
            'database' => env("DB_{$env_connection}_DATABASE"),
            'username' => env("DB_{$env_connection}_USERNAME"),
            'password' => env("DB_{$env_connection}_PASSWORD"),
            'strict' => false,
        ]]);

        DB::reconnect('mysql');
    }
}

当我尝试获取某些测试的数据库名称时,它向我返回了forge的默认名称,我没有配置它,这意味着我不可能获得用户,但是我可以,DB::table('users')->count()得到正确的连接,但是DB::getDatabaseName()没有得到

DatabaseConnection::setConnection('different_database');
dump(DB::getDatabaseName()); \\ returns 'forge' instead of 'different_database'
dd(DB::table('users')->count()); \\ returns 3, thats the users from 'different_database' database

我做错了什么,还是laravel坏了?

1 个答案:

答案 0 :(得分:0)

使用此

try {
   $db_connection = DB::connection('different_database');
   dd($db_connection->getDatabaseName();
} catch(\PDOException $e) {
   dd($e);     
}

我现在只是模仿您的问题,这对我有用。 如果可行,它将转储数据库名称,否则捕获并转储错误