Laravel | 複数のデータベースの接続、管理方法

Laravel

システムの規模が大きくなると、複数のデータベースを同時に扱う場合があります。
オンライン系の情報を管理するデータベースと、バッチ系を管理するデータベースを分けて運用したい場合などがあります。
本記事では、Laravelで複数のデータベースを利用する際の設定方法や実践的な活用方法について解説します。

環境設定

.env

複数のデータベースに接続するために、まず.env ファイルを編集します。
それぞれのデータベース接続情報を設定します。

config/database.php

config/database.php ファイルを編集し、データベース接続情報を追加します。

設定の確認

設定が完了したら、以下のコマンドでLaravelアプリケーションを再起動し、設定を反映します。

クエリビルダーでの使い方

Laravelのクエリビルダーを使用すると、SQL文を直接書かずにデータベース操作を行うことができます。
複数のデータベースを使用する場合、DB::connection() メソッドを用いて接続を切り替えることで、簡単に異なるデータベースを操作できます。

基本的な使い方

DB::connection('接続名') を使用して、特定のデータベース接続を選択できます。

以下は、デフォルトのデータベース(mysql)とログ用データベース(sub_mysql)を切り替えてデータを取得する例です。

connection('接続名') で接続を明示することができます。
table('テーブル名') で、操作対象のテーブルを指定します。

データ挿入

Eloquentでの使い方

Eloquentは、LaravelのORM(Object-Relational Mapping)機能で、データベース操作をモデルを通じて直感的に行える強力なツールです。複数のデータベースを操作する場合でも、モデルに適切な接続を指定するだけで簡単に利用できます。

モデルで接続を指定

複数のデータベースを扱う際、モデルの $connection プロパティで接続を指定します。

例として、users テーブルと log テーブルを、それぞれ異なるデータベースで管理する場合のモデルを作成します。

$connection プロパティにデータベース接続名を設定します。
$table プロパティでテーブル名を指定できます。

データの取得

データの保存

リレーションの設定

Eloquentではリレーションを利用できますが、異なるデータベース間のリレーションは直接サポートされていません。
そのため、手動でリレーションを扱う必要があります。

マイグレーションの実行

特定のデータベースでマイグレーションを実行する

Laravelでは、--database オプションを使用して、特定のデータベース接続を指定できます。
以下は、sub_mysql 接続に対してマイグレーションを実行する例です。

このコマンドを実行すると、sub_mysql 接続に設定されたデータベースでマイグレーションが実行されます。

データベースごとのディレクトリを作成

database/migrations ディレクトリ内に、接続ごとのサブディレクトリを作成します。

ブディレクトリに分けた場合でも、--pathオプションを使用して特定のディレクトリのみを対象にマイグレーションを実行できます。

400 Bad Request

400 Bad Request


nginx
タイトルとURLをコピーしました