ベースモデルの作成とベースモデルを使ったダイナミックな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接続を統一的に制御することが出来ます。