.ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録

.検索

.メインメニュー

.フォーラムメニュー

.オンライン状況
9 人のユーザが現在オンラインです。 (9 人のユーザが フォーラム を参照しています。)

登録ユーザ: 0
ゲスト: 9

もっと...

.
.リンク集

メイン
   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
居住地: 東京、日本
投稿: 1007
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を別に接続したりする可能性も出てきたので、この情報はありがたかったです。

どうもありがとうございました。


----------------
 チームカブトガニ(仮)
  ブログで活動中です。
  http://teamsyh.dip.jp/
------------------------------

unito93
投稿日時: 2007-4-6 16:12
Baker スタート
登録日: 2007-3-9
居住地:
投稿: 7
Re: 複数DBの使い分け・切り替え
あまり気が進まなかったのですが、使い勝手が悪すぎたのでコアクラスを書き換えてしまいました。

cake/libs/model/dbo/dbo_mysql.php に存在する

<?php
$this
->connection
?>



をすべて

<?php
$this
->connection[$config['database']]
?>


に書き換えて、

app/config/database.php

<?php
'persistent' => false
?>



を書き足しました。

こうすることで、設定したデータベースごとにコネクションが張られて、一つのコントローラで複数のモデル(データベース)を使用しても reconnect() せずに取得・更新が可能になりました。

reconnect() 無しで現状でカバーできる使い方がありましたら、ご教授いただきたく思います。
急ぎで修正してしまったので、できればコアはそのままで使用したいのです。
unito93
投稿日時: 2007-4-6 16:27
Baker スタート
登録日: 2007-3-9
居住地:
投稿: 7
Re: 複数DBの使い分け・切り替え
前の記事の件で訂正です。

app/config/database.php

<?php
'persistent' => false
?>




のみで大丈夫でした。
ガセネタで申し訳ございませんでした。
shun
投稿日時: 2007-4-6 17:38
Cake 職人
登録日: 2006-7-14
居住地: 東京、日本
投稿: 1007
Re: 複数DBの使い分け・切り替え
試行錯誤の記録も歓迎です!

ありがとうございます。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を
 


. .