使用 laravel 5.8.0。有几个数据库,其中的数据是从管理面板填充的。当然,数据不会进入标准配置 (/config/database.php),而是记录并存储在单独的 JSON 配置 (/storage/app/databases.json) 中。
问题是: 我怎样才能连接到第三方数据库,而不是通过手动将数据输入到配置中,而是使用我自动获取的数据进行连接?
我知道存在setConnection()。试图写这样的东西:
$servers = conf()->get('servers'); //Пакет garf/laravel-conf, тут у меня массив с информацией по базам
foreach($servers as $server){
if(empty(Config::get("database.connection.".$server['name_database']))){
Config::set( // И через config() тоже работать не будет
'database.connection.'.$server['name_database'],
[
'driver' => 'mysql',
'host' => $server['ip_database'] ?? '127.0.0.1',
'port' => $server['port_database'] ?? 3306,
'database' => $server['name_database'],
'username' => $server['user_database'],
'password' => $server['pass_database'],
'unix_socket' => '',
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'prefix_indexes' => true,
'strict' => true,
'engine' => null,
]
);
}
$punishment = new Punishment;
$punishment->setConnection($server['name_database']);
$list = $punishment->where('name', '=', Auth::user()->name);
}
但是 Laravel 想以编程方式在其配置中输入一些东西,所以我得到一个错误:
InvalidArgumentException 未配置数据库 [server_classic]。
PS我只是没有看到直接(通过相同的PDO)编写连接的意义。并且不要写“使用一个基地”,这里不会这样,因为第三方基地在游戏服务器和服务器本地使用,您只需要不时到站点获取一些信息即可时间。
创建一个继承
\Illuminate\Database\DatabaseManager并覆盖configuration(). 例如,我在\App\Database\DatabaseManager. 结果应如下所示:用我们修改的类替换默认的 DatabaseManager,创建你自己的
DatabaseServiceProvider:Laravel 会一路创建它
\App\Providers\DatabaseServiceProvider。像这样改变它的代码:config/app.php在该部分的文件中,providers将标准文件替换DatabaseServiceProvider为新文件:它应该如何工作。
适用于您的情况。您可以通过这种方式获得所有连接设置:
$servers你应该有这样的结构:您可以在不同的数据库上使用相同的模型,如下所示:
或者通过直接访问表进行相同的操作: