symfony Doctrineで複数DB接続の切替
現在Webシステムの開発は、symfony+doctrineで行っていますが、doctrineに関しての情報が少ないので、
ちょっとしたテクニックをご紹介します。
Doctrineはデフォルトで複数DB接続の切替が可能ですが、あらかじめ使用するDBが確定している事が前提です。
ただ、以下のようなケースはちょっと工夫が必要となります。
① 登録ユーザー毎に、DBを分ける
②ユーザー毎のDB定義は同じ。
通常であればDBを切り替える場合、databases.ymlに以下のように記述します。
all:
user1: ← 接続名
~
user2: ← 接続名
~
しかし、ユーザー毎のDB定義が同じだと、doctrine:build-modelで作成されるクラス名が
同じになる為、問題となります。また、ユーザーが増える度にコマンドを叩くのは手間
がかかります。
で、どうするかというと
【① デフォルトの接続設定をdatabases.ymlに記述】
all:
user: ←各ユーザー用の接続名
classs: sfDoctrineDatabase
param:
dsn: 'mysql:host=localhost;dbname=dummydb'
username: dummy
password: dummy
doctrineは、「user」という接続名でDB接続情報を保持しているので、それを再設定
してあげるだけで切り替える事ができます。
【② doctrineの接続再作成処理】
// デフォルトの「user」接続を破棄
Doctrine_Manager::getInstance()->closeConnection(
Doctrine_Manager::getInstance()->getConnection('user')
);
// ユーザー毎の接続を再作成
new sfDoctrineDatabase(array(
'name'=>'user',
'dsn'=>'mysql:host=localhost;dbname=hogehoge',
'username'=>'hoge',
'password'=>'hoge'
));
ユーザー毎のDBへとアクセスする前に、上記の処理を追加するだけでDB接続先を切り替える事が出来ます。
毎回上記処理を入れるのは煩雑なので、専用のフィルタを作成すれば簡単です。
※ そういえば、symfony1.3からは、doctrineがメインのORMになるみたいです。
まだまだ、doctrineの情報はpropelに比べると少ないので増えていけばいいですね。
この投稿へのトラックバック
トラックバックはありません。
- トラックバック URL
この投稿へのコメント