Idiorm & Parisでマスター/スレーブ

Idiorm & Parisとは

Idiorm & Paris とは PHP で作られたORMです。
軽量なFrameworkなどと連携されていることが多いです。

使いやすいので最近使うことが多いですが、
未だに読み方がわかりません・・・。  
イディーオーアールエム? アイディアイオーアールエム?

ORMとは Symfonyなどで言うとDoctrineやPropelなどやActiveRecordのことです。
IT業界にいればどこに行っても耳にタコが出来るくらい聞くことになると思います。

基本的な使い方は置いておきます。

ここで説明するのは Idiorm & Parisでマスターとスレイブでコネクションを分ける方法です。

接続コネクションを意識しない初期化

ORM::configure('mysql:host=localhost;dbname=test');
ORM::configure('username', 'root');
ORM::configure('password', 'root');
ORM::configure('caching', false);
ORM::configure('logging', true);
ORM::configure('logger', function($log_string, $query_time){
	// クエリーログを何かする
});
// 以下は本家からコピペ
$user = ORM::for_table('user')
    ->where_equal('username', 'j4mie')
    ->find_one();

大規模なシステムで全てのユーザーが1つのDBを見に行くというのは得策ではありませんし、
マスターとスレイブを分けて接続コネクションを管理する方法がよくとられます。

マスターとスレイブの接続コネクションを初期化

// マスターのコネクション
$master = 'master';
ORM::configure('mysql:host=localhost;dbname=test', null, $master);
ORM::configure('username', 'root', $master);
ORM::configure('password', 'root', $master);
ORM::configure('caching', false, $master);
ORM::configure('logging', true, $master);
ORM::configure('logger', function($log_string, $query_time){
	// クエリーログを何かする
}, $master);

// スレイブのコネクション
$slave = 'slave';
ORM::configure('mysql:host=localhost;dbname=test', null, $slave);
ORM::configure('username', 'root', $slave);
ORM::configure('password', 'root', $slave);
ORM::configure('caching', false, $slave);
ORM::configure('logging', true, $slave);
ORM::configure('logger', function($log_string, $query_time){
	// クエリーログを何かする
}, $slave);

// マスターから取得
$user = ORM::for_table('user', $master)
    ->where_equal('username', 'j4mie')
    ->find_one();
    
// スレイブから取得
$user = ORM::for_table('user', $slave)
    ->where_equal('username', 'j4mie')
    ->find_one();

これでマスターとスレイブの接続コネクションを別にして管理出来ます。

やり方としては最初のコネクションストリングを渡すときの
第三引数にコネクションの名前を渡します。
その後はつねに第二引数に$masterか$slaveを渡していけばOKです。

また、いつも第二引数を書くのが面倒であればModelを作成して
接続コネクションを持たせてしまうのもありです。
本家はそれを推奨しています。

Multiple Connections