2017-09-05 41 views
3

這是Laravel的數據庫分隔設置的推薦規則。如何劃分Laravel中的讀/寫數據庫設置?

'mysql' => [ 
    'read' => [ 
        'host' => '192.168.1.1', 
       ], 
    'write' => [ 
        'host' => '196.168.1.2' 
       ], 
     'sticky' => true, 
     'driver' => 'mysql', 
     'database' => 'database', 
     'username' => 'root', 
     'password' => '', 
     'charset' => 'utf8mb4', 
     'collation' => 'utf8mb4_unicode_ci', 
     'prefix' => '', 
    ], 

但是,如果我想使用不同的接入信息DB_NAME,USER_ID,PASS等,以每個讀/寫數據庫,然後我怎麼能做到嗎?謝謝。

+0

https://laravel.com/docs/master/database#using-multiple-database-connections –

回答

1

您可以創建兩個連接,然後使用指定用雄辯的連接上的方法:

'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, 
     ], 
'mysql2' => [ 
      'driver' => 'mysql', 
      'host' => env('DB_HOST2', '127.0.0.1'), 
      'port' => env('DB_PORT2', '3306'), 
      'database' => env('DB_DATABASE2', 'forge'), 
      'username' => env('DB_USERNAME2', 'forge'), 
      'password' => env('DB_PASSWORD2', ''), 
      'unix_socket' => env('DB_SOCKET2', ''), 
      'charset' => 'utf8mb4', 
      'collation' => 'utf8mb4_unicode_ci', 
      'prefix' => '', 
      'strict' => true, 
      'engine' => null, 
     ], 


User::on('mysql2')->where('id', $id)->update($data); 


或使用查詢生成器:

DB::connection('mysql2')->table('users')->where('id', $id)->update($data); 
+0

非常感謝。 @leyduana。 :) 順便說一句,如何使查詢從A表讀取數據並通過ID與現有的B表數據組進行連接? – Magnetic

1

你可以聲明另一個數據庫conecction這樣的:

'mysql' => [ 
    'read' => [ 
        'host' => '192.168.1.1', 
       ], 
    'write' => [ 
        'host' => '192.168.1.1' 
       ], 
     'sticky' => true, 
     'driver' => 'mysql', 
     'database' => 'database', 
     'username' => 'root', 
     'password' => '', 
     'charset' => 'utf8mb4', 
     'collation' => 'utf8mb4_unicode_ci', 
     'prefix' => '', 
], 

'writecon' => [ 
    'read' => [ 
     'host' => '196.168.1.2', 
    ], 
    'write' => [ 
     'host' => '196.168.1.2' 
    ], 
    'driver' => 'mysql', 
    'port' => env('DB2_PORT', '3306'), 
    'database' => env('DB2_DATABASE', 'db2'), 
    'username' => env('DB2_USERNAME', 'somename'), 
    'password' => env('DB2_PASSWORD', 'somepass'), 
    'charset' => 'utf8mb4', 
    'collation' => 'utf8mb4_unicode_ci', 
    'prefix' => '', 
], 

然後在您的.ENV補充:

DB2_PORT=3306 
DB2_DATABASE=db2 
DB2_USERNAME=somename 
DB2_PASSWORD=somepass 

而且你可以使用它像這樣:

$someModel->setConnection('writecon'); 
$someModel->save(); 

不測試過,但你可以試試。