鍍金池/ 問答/PHP/ laravel(5.5) 操作多個數(shù)據(jù)庫問題

laravel(5.5) 操作多個數(shù)據(jù)庫問題

問題:laravel5.5 使用ORM方式操作同一臺MySQL機(jī)器上的多個DB時,如何優(yōu)雅的設(shè)置鏈接?

laravel默認(rèn)會鏈接env里配置的數(shù)據(jù)庫,但是在不同的Model里我需要指定另一個數(shù)據(jù)庫而不是使用這個evn里默認(rèn)的;

查閱API手冊后知,在Model里指定$connection即可,但是經(jīng)過試驗發(fā)現(xiàn)這個$connection的值 是需要在/config/database.php里新增一個array配置。

/config/database.php

//默認(rèn),會讀取env里的mysql配置
'mysql' => [
            'driver' => 'mysql',
            'host' => env('DB_HOST', '127.0.0.1'),
            '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,
        ],
        //自己新增的
        'introduction_processQualityReport' => [
            'driver' => 'mysql',
            'host' => env('DB_HOST', '127.0.0.1'),
            '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,
        ],

經(jīng)過測試發(fā)現(xiàn),自己新增的這個數(shù)據(jù)key必須和我想要在Model里單獨指定使用的數(shù)據(jù)庫名一樣,否則就報錯database not xxx 之類的。

問題1
新增的那個數(shù)組introduction_processQualityReport,個人感覺value里一大堆和默認(rèn)的那個沒啥區(qū)別,這樣寫有些累贅,不知道有沒有別的更優(yōu)雅的方式?(這2個數(shù)據(jù)庫都是在同一臺MySQL上)

回答
編輯回答
我甘愿

laravel 同一個項目操作多個數(shù)據(jù)庫只能這樣用,其實也沒那么累贅。

2017年7月16日 00:57
編輯回答
不舍棄

我沒有出現(xiàn)database配置里key必須為數(shù)據(jù)庫名的問題,
database.php

'connections' => [
    'mysql' => [
        'driver' => 'mysql',
        'host' => env('DB_HOST', '127.0.0.1'),
        '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,
    ],
    'mysql_main' => [
        'driver'    => 'mysql',
        'host'      => env('DB_MAIN_HOST', 'localhost'),
        'port'      => env('DB_MAIN_PORT', '3306'),
        'database'  => env('DB_MAIN_DATABASE', 'forge'),
        'username'  => env('DB_MAIN_USERNAME', 'forge'),
        'password'  => env('DB_MAIN_PASSWORD', ''),
        'charset'   => 'utf8mb4',
        'collation' => 'utf8mb4_bin',
        'prefix'    => '',
        'strict' => true,
    ],
    'mysql_uc' => [
        'driver'    => 'mysql',
        'host'      => env('DB_UC_HOST', 'localhost'),
        'port'      => env('DB_UC_PORT', '3306'),
        'database'  => env('DB_UC_DATABASE', 'forge'),
        'username'  => env('DB_UC_USERNAME', 'forge'),
        'password'  => env('DB_UC_PASSWORD', ''),
        'charset'   => 'utf8mb4',
        'collation' => 'utf8mb4_bin',
        'prefix'    => '',
        'strict' => true,
    ],

.env
圖片描述

helpers.php定義是為了寫表單驗證直接指定連接時用的。

//
define('a_DATABASE_NAME', env('DB_DATABASE'));
//
define('b_DATABASE_NAME', env('DB_MAIN_DATABASE'));
//
define('c_DATABASE_NAME', env('DB_UC_DATABASE'));
2018年6月20日 21:59