【问题标题】:Dynamically Change Database with Laravel使用 Laravel 动态更改数据库
【发布时间】:2015-10-28 20:55:15
【问题描述】:

我是 Laravel 的新手,已经为此做了很多搜索。

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

我在动态切换数据库然后创建表时遇到问题。

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

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

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

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

提前致谢。

【问题讨论】:

    标签: php mysql laravel


    【解决方案1】:

    当您使用 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);
    

    【讨论】:

      猜你喜欢
      • 2020-06-16
      • 2022-06-25
      • 2019-04-08
      • 2020-04-11
      • 2017-05-15
      • 2020-10-11
      • 2021-05-21
      • 1970-01-01
      相关资源
      最近更新 更多