メイン CakePHP コントローラ(Controller)
複数DBの使い分け・切り替え | 投稿するにはまず登録を |
| スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
| 投稿者 | スレッド |
|---|---|
| TeamSYH | 投稿日時: 2007-2-20 16:04 |
Baker スタート ![]() ![]() 登録日: 2006-8-29 居住地: 東京都 投稿: 5 |
複数DBの使い分け・切り替え 投稿は初になります。よろしくお願いします。
早速の質問で申し訳ないですが、 Cakeで使用するDBを コントローラーごと(処理ごと)に切り替えて、 複数使用する方法をご存知の方がいれば お教えいただけますか? ※ちなみにDB環境はPostgreSQL 8.1.4になります。 --------例-------- 二つの会員サイトを立ち上げることになり、 二つ目のシステム(CakePHP)は一つ目をコピペで完了できたのですが(あとテーブル等も同じSQLを使用して、同構造のものを別DBに作成) そのなかで二つのサイトで同じ情報を見なくては ならないものが出てきたので、その共有用のDBを作成。 あとはCake側で、共有用DBと通常DBを切り替えて接続できれば良いんですが… ------------------ けっこうありそうなネタなので、 重複のスレがあれば案内してもらえれば助かります… |
| shun | 投稿日時: 2007-2-20 19:23 |
Cake 職人 ![]() ![]() 登録日: 2006-7-14 居住地: 東京、日本 投稿: 987 |
Re: 複数DBの使い分け・切り替え 通常のMVCの考え方でいけば、「データベースまわりを引き受けるのはモデル」になるので、モデルの中で設定できると思います。
その場合には、$useDbConfig="DB設定情報配列名"; を使えます。どこのデータベースに接続するかは、app/config/database.php に書き込めるようになっていますよね。 ここに好きなだけDB設定情報の配列を作って、 $useDbConfig = "default"; とか $useDbConfig = "test"; として設定できます。 このあたりの詳しい情報は下記あたりでしょうか。 Dynamic database switching http://groups.google.com/group/cake-php/browse_thread/thread/f12ecdb3a6019d83/ コントローラごとに切り替えたい場合にはちょっとひねって、ConnectionManager::getDataSource('user')->reconnect();を使うとか、一度、モデルを読み込まずにコントローラを動かして、あとからモデルを読み込むこともできるようです。(これは未検証?かも) Set table prefix depending on what user is logged in? http://groups.google.com/group/cake-php/browse_thread/thread/5ede5967e477b06a/ モデルを使わずに、$db->query() で処理する技は、hetima さんが書かれています。 CakePHP で Model を介さずに SQL を呼ぶ http://d.hatena.ne.jp/hetima/20070108 あとは、 Shin 1x1 さんの CakePHP 環境に応じてDBの設定を変える http://www.1x1.jp/blog/2006/09/cakephp_db_config.html など。いかがでしょうか。 ほかにアイデアをお持ちの方は? |
| TeamSYH | 投稿日時: 2007-2-20 20:15 |
Baker スタート ![]() ![]() 登録日: 2006-8-29 居住地: 東京都 投稿: 5 |
Re: 複数DBの使い分け・切り替え 早速の回答ありがとうございます。
モデルの方に書くべきでしたか;すいません。 「$useDbConfig」ですか。なるほど納得です。 「ConnectionManager::getDataSource()」 もうまく使えそうな気がします。 reconnect()で直接記述もいけるんですね… コントローラー、モデルごとよりもさらに 1アクション処理内で二つのDBを別に接続したりする可能性も出てきたので、この情報はありがたかったです。 どうもありがとうございました。
|
| unito93 | 投稿日時: 2007-4-6 16:12 |
Baker スタート ![]() ![]() 登録日: 2007-3-9 居住地: 投稿: 7 |
Re: 複数DBの使い分け・切り替え あまり気が進まなかったのですが、使い勝手が悪すぎたのでコアクラスを書き換えてしまいました。
cake/libs/model/dbo/dbo_mysql.php に存在する をすべて に書き換えて、 app/config/database.php を書き足しました。 こうすることで、設定したデータベースごとにコネクションが張られて、一つのコントローラで複数のモデル(データベース)を使用しても reconnect() せずに取得・更新が可能になりました。 reconnect() 無しで現状でカバーできる使い方がありましたら、ご教授いただきたく思います。 急ぎで修正してしまったので、できればコアはそのままで使用したいのです。 |
| unito93 | 投稿日時: 2007-4-6 16:27 |
Baker スタート ![]() ![]() 登録日: 2007-3-9 居住地: 投稿: 7 |
Re: 複数DBの使い分け・切り替え 前の記事の件で訂正です。
app/config/database.php のみで大丈夫でした。 ガセネタで申し訳ございませんでした。 |
| shun | 投稿日時: 2007-4-6 17:38 |
Cake 職人 ![]() ![]() 登録日: 2006-7-14 居住地: 東京、日本 投稿: 987 |
Re: 複数DBの使い分け・切り替え 試行錯誤の記録も歓迎です!
ありがとうございます。 |
| スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |
| 投稿するにはまず登録を | |



