使用Laravel动态更改数据库

时间:2015-10-28 20:55:16

标签: php mysql laravel

我是Laravel的新手,并在此方面做了相当多的搜索。

我正在创建一个理想情况下在用户创建时创建新数据库和表的系统。

我无法动态切换数据库,然后创建表格。

        DB::statement("CREATE DATABASE " . $new_db_name);
        DB::connection('mysql')->setDatabaseName($new_db_name);

创建新表,我相信会将数据库更改为,我通过运行

来确认
        echo DB::connection('mysql')->getDatabaseName();

但是当我运行create table命令时,表在旧数据库中创建。有什么想法吗?

先谢谢。

1 个答案:

答案 0 :(得分:0)

当您使用DB :: connection('mysql')时,您实际上正在使用数据库配置文件中定义的实例。这是您当前与特定数据库的连接。检查here我的意思。这就是为什么它不起作用。您需要创建它,将其添加到应用程序的配置实例中,然后将其初始化。

现在,以简洁的方式,如果我是你,我会制作类似this的内容,您将在其中创建一个新数据库并将其添加到您的配置中:

DB::getConnection()->statement('CREATE DATABASE :schema', array('schema' => $schemaName));

然后使用迁移在该数据库上创建新表:

Artisan::call('migrate', array('database' => $databaseConnection, 'path' => 'app/database/tenants'));

在此之后,您应该检查用于调用新创建的数据库实例的方法:

App::make('config')->set('database.connections.'.$tenantName, $newConnection);