データベース接続(Laravel)

データベース接続設定は、「.env」ファイルでも可能ではあるが、
複数のデータベースに接続する事も可能である。

「/config/database.php」ファイルの連想配列「connections」配下には、
種類ごとのSQLに応じた設定例が書かれてあるため、
種類ごとの設定しか出来ないのかと勘違いしやすいが、
同じSQLエンジンの別のDB設定も並列的に書く事も可能である。

'default' => env('DB_CONNECTION', 'mysql'),

この「default」プロパティの中身を変更する事で、
標準設定のデータベース設定を指定できる。
この初期の状態では、「.env」で指定がなければ、
「mysql」という設定名の項目を呼び出している。

MySQLの場合、以下のように「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,
        ],
        'sub-db-access' => [  // データベース接続名
            'driver' => 'mysql',
            'host' => env('DB_HOST', '127.0.0.1'),
            'port' => env('DB_PORT', '3306'),
            'database' => 'second_db',
            'username' => 'second_db_user',
            'password' => 'jfviodfeauivkfrjopaj',
            'unix_socket' => env('DB_SOCKET', ''),
            'charset' => 'utf8mb4',
            'collation' => 'utf8mb4_unicode_ci',
            'prefix' => '',
            'strict' => true,
            'engine' => null,
        ],

これで、モデルから以下のようにクラス変数のオーバーライドをする事により、
もうひとつのデータベースへの接続が可能となる。

モデルに記載するクラス変数

protected $connection = 'sub-db-access';

ちなみに代入する「データベース接続名」は、
データベース接続に直に使用する情報ではないため、ハイフン等も使える。