【问题标题】:How to build a custom connection outside of database.php in Laravel 5.4如何在 Laravel 5.4 中的 database.php 之外建立自定义连接
【发布时间】:2017-12-31 07:53:57
【问题描述】:

我正在构建一个使用多个数据库的系统。我目前有一个我正在使用的自定义配置文件,其中包含一些控件。此文件未通过版本控制。

我希望这些数据库独立于 git。我希望在不使用 config/database.php 的情况下构建自定义连接

我当然可以从 git 中删除 config/database.php,但我想保持整洁并使用我的自定义配置文件。

这是我的 clientconfig.php,可以在 /config 文件夹中找到

<?php
$clientDB = '';
if(isset($_SERVER['SERVER_NAME'])) {
    $apiDomain = $_SERVER['SERVER_NAME'];
    if ( $apiDomain == 'www.example.com' ) {
        $clientDB = 'clientdb_1';
    }
}
return  [

    'client_db' => $clientDB

];

我也想在 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', 'example'),
        'username' => env('DB_USERNAME', 'example'),
        'password' => env('DB_PASSWORD', 'example'),
        'charset' => 'utf8mb4',
        'collation' => 'utf8mb4_unicode_ci',
        'prefix' => '',
        'strict' => true,
        'engine' => null,
    ],

    'clientdb_1' => [
        'driver' => 'mysql',
        'host' => env('DB_HOST', 'localhost'),
        'port' => env('DB_PORT', '3306'),
        'database' => ('clientdb_1'),
        'username' => env('DB_USERNAME', 'example'),
        'password' => env('DB_PASSWORD', 'example'),
        'charset' => 'utf8mb4',
        'collation' => 'utf8mb4_unicode_ci',
        'prefix' => '',
        'strict' => true,
        'engine' => null,
    ],

有没有一种干净的方法可以做到这一点?

编辑: 我已经考虑了 .env 文件,但考虑到我可能有不同数量的数据库等,它太混乱了。我仍然会将它们添加到 database.php 中,这是我正在尝试的避免。

【问题讨论】:

标签: laravel laravel-5


【解决方案1】:

我可以使用config() 在该文件中添加我自己的新连接。

if ( $apiDomain == 'www.example.com' ) {

    $appUrl   = $apiDomain;
    $clientDB = 'clientdb_1';

    config(['database.connections.clientdb_1' => array(
        'driver'    => 'mysql',
        'host' => env('DB_HOST', 'localhost'),
        'port' => env('DB_PORT', '3306'),
        'database' => $clientDB,
        'username' => 'example',
        'password' => 'example',
        'charset' => 'utf8mb4',
        'collation' => 'utf8mb4_unicode_ci',
        'prefix' => '',
        'strict' => true,
        'engine' => null,

    )]);
}

注意:除非我的自定义配置文件是在 database.php 之后加载的,否则这不起作用。因为它是按字母顺序排列的,所以我不得不将我的文件重命名为 z_clientconfig.php

【讨论】:

  • 太棒了!这可以是正确的默认连接“mysql”也谢谢你
猜你喜欢
  • 1970-01-01
  • 2017-12-08
  • 1970-01-01
  • 2023-03-29
  • 1970-01-01
  • 2020-10-21
  • 2018-08-08
  • 2014-11-16
  • 1970-01-01
相关资源
最近更新 更多