データベース接続を動的に切り替える in Laravel

ベースモデルの作成とベースモデルを使ったダイナミックなDBコネクションの制御

Laravelでは標準でベースモデルがインストールされない

LaravelのModelはEloquentを継承する方針で開発していくことになっている。

データベース接続をアプリケーション内で動的に切り替えるため、個々のModelでDB Connectionを制御するのではなく、Eloquentを継承した

AppModel

をEloquentと個々のModel間に準備することで、統一的にDB Connectionを制御してみる。

AppModelの作成

継承の関係は、

Eloquent > AppModel > 個々のModel

という継承の流れになります。

以下の階層に

app/Models/AppModel.php

を作成します。

class AppModel extends \Eloquent
{
  public function __construct($attributes = array())
  {   
    parent::__construct($attributes);
  }
}

このAppModelを開発者が作成する個々のModelで継承します。

ModelでAppModelを継承

個々のModelでは、EloquentではなくAppModelを継承します。たとえば、

app/Models/Post.php

上のModelの場合は、以下のようにコーディングします。

class Post extends AppModel {
  protected $table = 'posts';
}

開発者は、アプリケーション内で統一的にModelを制御するコードをAppModelに書くことができるようになりました。

データベース接続の動的な切り替え

切り替えは、

$connectionプロパティ

を調整することで行います。事前に

app/config/database.php

mysql2

を用意しておきます。

class AppModel extends \Eloquent
{
  // 標準のDB接続
  protected $connection = 'mysql';

  public function __construct($attributes = array())
  {   
    parent::__construct($attributes);
    // mysql2に切り替え
    $this->connection = 'mysql2';
  }
}

切り替え部分のコードをif文で制御することで、DB接続を動的に調整することが可能になります。

ベースモデルを作成しEloquentとModel間でDB接続を統一的に制御することが出来ます。

Webエンジニアブログにコメント

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

データベース接続を動的に切り替える in Laravelの記事にコメントを投稿