鍍金池/ 問答/PHP/ laravel 如何通過數(shù)據(jù)庫連接多數(shù)據(jù)庫獲取數(shù)據(jù)

laravel 如何通過數(shù)據(jù)庫連接多數(shù)據(jù)庫獲取數(shù)據(jù)

目前需要實(shí)現(xiàn)一個功能,通過后臺配置數(shù)據(jù)庫服務(wù)器信息,可以直接連接遠(yuǎn)程不同的數(shù)據(jù)庫
怎樣才能實(shí)現(xiàn)通過后臺表單配置數(shù)據(jù)庫信息連接不同服務(wù)器的數(shù)據(jù)庫獲取數(shù)據(jù)信息,而不是將需要的數(shù)據(jù)庫信息保存在config表中?

回答
編輯回答
晚風(fēng)眠

先審題:

題主是想把相關(guān)的數(shù)據(jù)庫配置信息通過表單存儲在一個數(shù)據(jù)庫中,然后通過讀取數(shù)據(jù)庫中數(shù)據(jù)配置信息,然后去實(shí)現(xiàn)訪問不同數(shù)據(jù)庫的功能,而不是把所有的數(shù)據(jù)庫配置信息預(yù)先配置在 config/database.php 中。

如果沒有理解錯的話,再來解題:

Laravel 數(shù)據(jù)庫信息存儲到數(shù)據(jù)庫中

數(shù)據(jù)庫配置信息存儲在數(shù)據(jù)庫中,只要按照 Laravel 的數(shù)據(jù)庫配置要求去存儲即可,這個隨意題主怎么存儲,在 config/database.php 中已經(jīng)有了各類數(shù)據(jù)庫配置的示例。

多數(shù)據(jù)庫連接

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

把數(shù)據(jù)庫中存儲的數(shù)據(jù)配置信息設(shè)置到 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' => ...
        ]);

    }        

沒有親自去實(shí)戰(zhàn),提供一種思路,請題主自行實(shí)驗(yàn)。

2017年1月9日 06:20
編輯回答
黑與白

1.建一個conf的表 字段可以很簡單(id,name,value) 建議名字用大寫字母和下劃線 例DB_USER_1
2.在公共函數(shù)庫里寫一個方法 只要傳入name 就可以獲取值
3.后臺表單提交后干兩件事
一、 存入數(shù)據(jù)庫
二、 生成一個文件 內(nèi)容就是一個數(shù)組
結(jié)構(gòu)和配置文件結(jié)構(gòu)類似就選行
意思只要后臺配置改變 文件重新生成
使用的時候 盡量讀文件

2018年4月6日 17:31
編輯回答
瘋子范

開發(fā)前可以肯定的方向是:

1.前端配置的數(shù)據(jù)庫信息一定是寫入數(shù)據(jù)庫中的(反之第一想法是直接修改配置信息,明顯不可行)

2.如果可以自己寫一套pdo連接,也可以解決這個問題,是個待選方案,弊端在于放棄laravel強(qiáng)大的ORM

3.如果復(fù)用ORM,laravel 只支持 connection() 方法選擇不同數(shù)據(jù)庫,那么我能想到的就是在修改laravel源碼,添加一個支持導(dǎo)入配置信息的方法。例如

// $config 是前端選擇的數(shù)據(jù)庫的配置信息
DB::config($config)->select();
2017年9月13日 03:26