利用Laravel服务提供者, 动态修改或者添加数据的配置
DatabaseServiceProvider
扩展配置文件
创建Database服务提供者
php artisan make:provider DatabaseServiceProvider
加载(注册)服务提供者, 两种办法
方法一.AppServiceProvider中注册
<?php
namespace App\Providers;
...
/**
* Register any application services.
*
* @return void
*/
public function register()
{
//
$this->app->register(DatabaseServiceProvider::class);
}
方法二.confg/app.php中全局添加
'providers' => [
...
App\Providers\DatabaseServiceProvider::class,
在DatabaseServiceProvider
服务提供者中扩展数据库配置
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class DatabaseServiceProvider extends ServiceProvider
{
/**
* Bootstrap the application services.
*
* @return void
*/
public function boot()
{
//
$new = [
'mydb-test' => [
'driver' => 'mysql',
'host' => 'docker.app',
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'strict' => true,
'engine' => null,
]];
$this->app['config']['database.connections'] = array_merge($this->app['config']['database.connections'], $new);
}
/**
* Register the application services.
*
* @return void
*/
public function register()
{
}
}
测试, tinker中连接数据库即可
上述代码已经可以实现需求,但是不够风骚。
下述代码my-test
为连接下标, set方法会自动设置对应的数组下标
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class DatabaseServiceProvider extends ServiceProvider
{
/**
* Bootstrap the application services.
*
* @return void
*/
public function boot()
{
$new = [
'driver' => 'mysql',
'host' => 'docker.app',
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'strict' => true,
'engine' => null,
];
$this->app->get('config')->set('database.connections.mydb-test', $new);
}
/**
* Register the application services.
*
* @return void
*/
public function register()
{
}
}
剩下的, 你可以用tinker测试数据库连接是不是已经成功添加