155
152

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[Laravel]Laravelで別々のDB(MySQL)に接続させる方法

Last updated at Posted at 2016-01-29

Laravelで別々のDB(MySQL)に接続させる方法

経緯

MySQLで部分的に外部DBに接続する必要に迫られたので調査して実践。

config/database.php

  • 外部DBの接続情報を追加します
  • デフォルトで接続するDBを見直します。(デフォルト接続先の名前を変更する場合)

まずはデフォルトの状態(MySQL部分のみ抜粋)

'default' => 'mysql',
	
'connections' => [
    'mysql' => [
        'driver'    => 'mysql',
        'host'      => env('DB_HOST', 'localhost'),
        'database'  => env('DB_DATABASE', 'forge'),
        'username'  => env('DB_USERNAME', 'forge'),
        'password'  => env('DB_PASSWORD', ''),
        'charset'   => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix'    => '',
        'strict'    => false,
    ]
],

修正後(MySQL部分のみ抜粋)

'default' => 'mysql_one',
	
'connections' => [
	'mysql_one' => [
		'driver'    => 'mysql',
		'host'      => env('DB_HOST_ONE', 'localhost'),
		'database'  => env('DB_DATABASE_ONE', 'forge'),
		'username'  => env('DB_USERNAME_ONE', 'forge'),
		'password'  => env('DB_PASSWORD_ONE', ''),
		'charset'   => 'utf8',
		'collation' => 'utf8_unicode_ci',
		'prefix'    => '',
		'strict'    => false,
	],
	'mysql_two' => [
		'driver'    => 'mysql',
		'host'      => env('DB_HOST_TWO', 'localhost'),
		'database'  => env('DB_DATABASE_TWO', 'forge'),
		'username'  => env('DB_USERNAME_TWO', 'forge'),
		'password'  => env('DB_PASSWORD_TWO', ''),
		'charset'   => 'utf8',
		'collation' => 'utf8_unicode_ci',
		'prefix'    => '',
		'strict'    => false,
   ],
],
  • mysql_twoを新たに接続先として追加しました
  • 識別しやすいようにデフォルトの名前を変更しました
  • env()で取得している値は「.env」ファイルに設定しています
  • デフォルトの接続先は「mysql_one」で設定しています
    • これにより接続先を明示しない限り「mysql_one」で繋がります

これにて設定は完了です。

コード上での接続切り替え

上記設定で接続先を増やすことができました。
次は実際の切り替え方法を記載しています。
今回は以下2つのDB操作について記載します。

クエリビルダーでの切り替え

SELECTする場合を例にします。

mysql_one(デフォルトDB)

DB::select('select * from users');

mysql_oneはデフォルト接続先に指定しているので、
何も明示せずとも接続が可能となっています。
勿論明示しての接続もできます。

DB::connection('mysql_one')->select('select * from users');

mysql_two(外部DB)

DB::connection('mysql_two')->select('select * from members');

mysql_twoについては接続先を明示する必要があります。
上記で接続可能となっています。

Eloquentでの切り替え

mysql_one(デフォルトDB)

とくに必要ありません。

mysql_two(外部DB)

class Members extends Model
{
	protected $connection = 'mysql_two';
}

プロパティ「$connection」を設定することで切り替えが可能です。

接続テスト

155
152
5

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
155
152

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?