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

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

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

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

先審題:

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

如果沒(méi)有理解錯(cuò)的話,再來(lái)解題:

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

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

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

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

把數(shù)據(jù)庫(kù)中存儲(chǔ)的數(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' => ...
        ]);

    }        

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

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

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

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

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

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

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

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

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