管理システムなどを作っていると、
システムが大きくなってきたら、複数のデータベースに接続する必要がでてくるケースもあります。
Query Builderクラスでは、DB::connection('database_name') で接続を切り替える事は可能ですが、
今回はLaravelに標準で搭載されているORM、EloquentでModel毎にデータベースの接続を変更する方法を紹介したいと思います。
複数の接続をする為に、コンフィグファイルに”mysql_2”の接続を追加しておきしました。
テスト環境はLarave5.1です。
configファイル
// config/database.php
// デフォルトデータベース -> mysql_1
'default' => 'mysql_1',
// データベースの設定
'connections' => [
// データベース1
'mysql_1' => [
'driver' => 'mysql',
'host' => env('DB_HOST'),
'database' => 'site_1',
'username' => 'user_name',
'password' => 'user_pass',
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => false,
],
// 追加したデータベース
// データベース2
'mysql_2' => [
'driver' => 'mysql',
'host' => env('DB_HOST'),
'database' => 'site_2',
'username' => 'user_name',
'password' => 'user_pass',
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => false,
],
//... 略
Model側の設定
Model側に特別な処理を書く必要はなく、
以下の変数を定義するだけで接続するデータベースを定義出来ます。
protected $connection = 'database_name';
*フルコード
// app/Models/Article.php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Article extends Model
{
// データベースのコネクションの設定
protected $connection = 'mysql_2';
// テーブル
protected $table = 'articles';
// .... 略
}
モデル内で" protected $connection = ' ' " が定義されていなければ、
configで定義したデフォルトのデータベースを参照します。
Laravelだけではなく、lumenでも同様のことが出来るので、
複数のデータベースを使う時は是非参考にして下さい。