カテゴリ: Laravel 更新日: 2025/11/08

LaravelでモデルごとにDB接続先を切り替える方法

LaravelでモデルごとにDB接続先を切り替える方法
LaravelでモデルごとにDB接続先を切り替える方法

先生と生徒の会話形式で理解しよう

生徒

「Laravelで、あるモデルだけ別のデータベースに接続したい場合はどうすればいいですか?」

先生

「Laravelでは、モデルごとに接続するデータベースを指定することができます。$connectionプロパティを使う方法です。」

生徒

「$connectionプロパティって何ですか?」

先生

「モデルがどのデータベース接続を使うかを指定する変数です。これにより、アプリ全体でなく特定のモデルだけ別のDBを使えます。」

生徒

「具体的な例を見せてもらえますか?」

先生

「もちろんです。それでは順を追って説明しましょう。」

1. データベース接続を設定する

1. データベース接続を設定する
1. データベース接続を設定する

まず、Laravelのconfig/database.phpで複数のデータベース接続を定義します。例えば、デフォルトのMySQL接続と、もう一つ別の接続を作る場合は以下のように設定します。


'mysql' => [
    'driver' => 'mysql',
    'host' => env('DB_HOST', '127.0.0.1'),
    'database' => env('DB_DATABASE', 'laravel'),
    'username' => env('DB_USERNAME', 'root'),
    'password' => env('DB_PASSWORD', ''),
    'charset' => 'utf8mb4',
    'collation' => 'utf8mb4_unicode_ci',
    'prefix' => '',
    'strict' => true,
    'engine' => null,
],

'secondary' => [
    'driver' => 'mysql',
    'host' => env('DB_SECOND_HOST', '127.0.0.1'),
    'database' => env('DB_SECOND_DATABASE', 'other_db'),
    'username' => env('DB_SECOND_USERNAME', 'root'),
    'password' => env('DB_SECOND_PASSWORD', ''),
    'charset' => 'utf8mb4',
    'collation' => 'utf8mb4_unicode_ci',
    'prefix' => '',
    'strict' => true,
    'engine' => null,
],

このように'secondary'という接続を追加すると、あとでモデルから使えるようになります。

2. モデルごとに接続先を切り替える

2. モデルごとに接続先を切り替える
2. モデルごとに接続先を切り替える

モデルで別の接続を使うには、$connectionプロパティを設定します。


namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Order extends Model
{
    // secondary接続を使用
    protected $connection = 'secondary';

    protected $table = 'orders';
}

このOrderモデルを使ってクエリを実行すると、自動的にsecondary接続先のデータベースが使われます。

3. 接続先を動的に切り替える方法

3. 接続先を動的に切り替える方法
3. 接続先を動的に切り替える方法

場合によっては、実行時に接続先を変えたいことがあります。その場合は、setConnectionメソッドを使います。


$order = new Order();
$order->setConnection('mysql'); // デフォルト接続に切り替え
$orders = $order->all();

これにより、モデルインスタンス単位で接続先を切り替えられます。

4. 注意点とポイント

4. 注意点とポイント
4. 注意点とポイント

モデルごとの接続切り替えは便利ですが、注意点もあります。

  • リレーションで異なる接続を使う場合、Eager LoadingやJoinで想定外の動作になることがある。
  • トランザクションは接続ごとに管理されるため、複数接続での一貫性には注意。
  • キャッシュやイベントも接続ごとに動作する場合があるので確認が必要。

これらを理解しておくと、モデルごとのデータベース切り替えを安全に行えます。

5. まとめ

5. まとめ
5. まとめ

Laravelでは$connectionプロパティやsetConnectionメソッドを使うことで、モデルごとにデータベース接続を切り替えることが可能です。これにより、複数のデータベースを扱うアプリケーションでも柔軟にデータ操作ができます。

関連記事:
カテゴリの一覧へ
新着記事
New1
Laravel
Laravelの認証状態をチェックする方法を完全解説!authとAuth::check()を初心者向けにやさしく説明
New2
CodeIgniter
CodeIgniterのコントローラクラスの作り方を完全ガイド!初心者でもわかる基礎から実践まで
New3
Symfony
Symfonyのフォームラベルを多言語対応!初心者でもわかる翻訳設定ガイド
New4
Laravel
Laravelでユーザー登録機能を作る方法!初心者向けにバリデーションとリダイレクトをやさしく解説
人気記事
No.1
Java&Spring記事人気No1
Laravel
Laravelのデータベース設定方法を完全ガイド!初心者でもわかる.envファイルの使い方
No.2
Java&Spring記事人気No2
Laravel
Laravelのビューとは?Bladeテンプレートの基本を解説
No.3
Java&Spring記事人気No3
Laravel
Laravelでセッションを扱う方法!保存方法と利用例を解説
No.4
Java&Spring記事人気No4
Laravel
Laravelのルート一覧を確認する方法!初心者でもわかるphp artisan route:listの使い方
No.5
Java&Spring記事人気No5
Laravel
Laravelでルーティングを設定する方法!web.phpと基本ルートの書き方を初心者向けに徹底解説
No.6
Java&Spring記事人気No6
Laravel
Laravelでログを出力する方法(Monolog・storage/logs)
No.7
Java&Spring記事人気No7
Laravel
LaravelでルートをBladeテンプレートに記述する方法(route関数)
No.8
Java&Spring記事人気No8
Laravel
Laravelのルートキャッシュ機能を活用してパフォーマンス改善!初心者でもわかる完全ガイド