laravel 如何通过数据库连接多数据库获取数据

目前需要实现一个功能,通过后台配置数据库服务器信息,可以直接连接远程不同的数据库
怎样才能实现通过后台表单配置数据库信息连接不同服务器的数据库获取数据信息,而不是将需要的数据库信息保存在config表中?

阅读 4.3k
3 个回答

开发前可以肯定的方向是:

1.前端配置的数据库信息一定是写入数据库中的(反之第一想法是直接修改配置信息,明显不可行)

2.如果可以自己写一套pdo连接,也可以解决这个问题,是个待选方案,弊端在于放弃laravel强大的ORM

3.如果复用ORM,laravel 只支持 connection() 方法选择不同数据库,那么我能想到的就是在修改laravel源码,添加一个支持导入配置信息的方法。例如

// $config 是前端选择的数据库的配置信息
DB::config($config)->select();

1.建一个conf的表 字段可以很简单(id,name,value) 建议名字用大写字母和下划线 例DB_USER_1
2.在公共函数库里写一个方法 只要传入name 就可以获取值
3.后台表单提交后干两件事
一、 存入数据库
二、 生成一个文件 内容就是一个数组
结构和配置文件结构类似就选行
意思只要后台配置改变 文件重新生成
使用的时候 尽量读文件

先审题:

题主是想把相关的数据库配置信息通过表单存储在一个数据库中,然后通过读取数据库中数据配置信息,然后去实现访问不同数据库的功能,而不是把所有的数据库配置信息预先配置在 config/database.php 中。

如果没有理解错的话,再来解题:

Laravel 数据库信息存储到数据库中

数据库配置信息存储在数据库中,只要按照 Laravel 的数据库配置要求去存储即可,这个随意题主怎么存储,在 config/database.php 中已经有了各类数据库配置的示例。

多数据库连接

在官方文档中有说明用法 $users = DB::connection('foo')->select(...); 看官方文档即可。

把数据库中存储的数据配置信息设置到 Laravel 的 config 中去

  1. 首先编写自己的 ServiceProvider
  2. ServiceProvider boot 方法中添加如下代码。
    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        //1. get your database config from database.
        //Your code.
        
        
        //2. set database info to laravel database config.
        $this->app['config']->set('database.connections.testing', [
            'driver' => 'mysql',
            'database' => ...
        ]);

    }        

没有亲自去实战,提供一种思路,请题主自行实验。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题