LaravelでModelごとに接続するデータベースを設定する



管理システムなどを作っていると、
システムが大きくなってきたら、複数のデータベースに接続する必要がでてくるケースもあります。

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でも同様のことが出来るので、
複数のデータベースを使う時は是非参考にして下さい。

この記事のカテゴリ
プログラミング

この記事のタグ