【问题标题】:Laravel - How to add new connection to database.phpLaravel - 如何向 database.php 添加新连接
【发布时间】:2016-11-08 22:15:16
【问题描述】:

我需要在 laravel 中使用多个数据库,我正在尝试创建一个表单来添加一个新的数据库连接到 config/database.php 中的连接数组。

我不想手动添加连接,而是通过表单。

'connections' => [

    'sqlite' => [
        'driver' => 'sqlite',
        'database' => env('DB_DATABASE', database_path('database.sqlite')),
        'prefix' => '',
    ],

    'mysql' => [
        'driver' => 'mysql',
        'host' => env('DB_HOST', 'localhost'),
        'port' => env('DB_PORT', '3306'),
        'database' => env('DB_DATABASE', 'forge'),
        'username' => env('DB_USERNAME', 'forge'),
        'password' => env('DB_PASSWORD', ''),
        'charset' => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix' => '',
        'strict' => true,
        'engine' => null,
    ],

    'pgsql' => [
        'driver' => 'pgsql',
        'host' => env('DB_HOST', 'localhost'),
        'port' => env('DB_PORT', '5432'),
        'database' => env('DB_DATABASE', 'forge'),
        'username' => env('DB_USERNAME', 'forge'),
        'password' => env('DB_PASSWORD', ''),
        'charset' => 'utf8',
        'prefix' => '',
        'schema' => 'public',
        'sslmode' => 'prefer',
    ],

],

谢谢

【问题讨论】:

  • 这个链接可能有帮助here

标签: laravel laravel-5


【解决方案1】:

您只需根据需要将任意数量的数据库添加到数组中,然后将连接值添加到您的 .env 文件或数组值中,如下所示:

return array(

'default' => 'my_first_db',

'connections' => array(

    # Our primary database connection
    'my_first_db' => array(
        'driver'    => 'mysql',
        'host'      => 'host1',
        'database'  => 'database1',
        'username'  => 'user1',
        'password'  => 'pass1'
        'charset'   => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix'    => '',
    ),

    # Our secondary database connection
    'my_second_db' => array(
        'driver'    => 'mysql',
        'host'      => 'host2',
        'database'  => 'database2',
        'username'  => 'user2',
        'password'  => 'pass2'
        'charset'   => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix'    => '',
    ),
),

);

Schema::connection('my_second_db')->create('a_new_table', function($table)
{
    $table->increments('id'):
});

$users = DB::connection('my_second_db')->select('users');

要通过表单添加连接,您需要将数据发布到与上述类似的模板,然后写入服务器,这样做会带来一些安全风险,并且需要小心操作以及如何去做,在请求中发布数据库数据,然后将数据库数据保存到文件中有点过分了。

您可以设置一个配置文件,其中包含使用 PDO 预定义的 10 个数据库,然后您可以覆盖设置或保存到未分配设置的配置文件之一。

【讨论】:

  • 好的,我明白了。最好手动在文件中添加连接。可以在登录屏幕的下拉列表中列出此连接吗?在输入您的访问数据后,我需要该用户选择他想要的数据库,然后应用程序使用该数据库。我怎样才能做到这一点? @Birdy
  • 是的,您可以使用 10 个预定义的配置布局来填充一个选择选项,并且在配置文件中您可以将值存储为变量,然后将数据传递给配置文件(类),然后您的数据库是动态存储的,另一种选择是拥有一个数据库表,该表存储您的每个用户或您希望拥有的每个配置的数据库值,然后您只有 1 个数据库连接类,它根据数据库检索连接值在用户 ID 上,您希望我在不知道您想要的用例的情况下提供一个示例吗?
  • 是的,如果你给我一个例子,那就太棒了。我想要做的是:我有几个数据库(客户端),在我的应用程序登录中,我必须选择我要使用的数据库,登录后应用程序将加载所选数据库的数据。你明白我的想法吗? @Birdy
  • 我可以使用 Schema::connection($db) 进行所有查询...。这个 $db 应该是用户选择的全局变量...我怎样才能把这个变量放在会话中例如?
【解决方案2】:

您可以使用配置助手并动态设置配置:

config([
    'database.connections.mysql.database' => $dynamicDB,
    'database.connections.mysql.username' => $dbUsername,
    'database.connections.mysql.password' => $dbPassword,
    // Any other dynamically set variables
]);

您可以将参数存储在会话中并将它们默认为您的配置文件:

config([
    'database.connections.mysql.database' => session('db_database', config('database.connections.mysql.database')),
    'database.connections.mysql.username' => session('db_username', config('database.connections.mysql.username')),
    'database.connections.mysql.password' => session('db_password', config('database.connections.mysql.password')),
    // Any other dynamically set variables
]);

在中间件中执行此操作可以让您更好地控制设置和使用这些参数的位置/时间。

【讨论】:

    猜你喜欢
    • 2023-03-29
    • 1970-01-01
    • 2019-03-10
    • 1970-01-01
    • 2019-07-17
    • 2017-12-31
    • 2016-03-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多