
【CakePHP2】動的に非CakePHPなデータベースに切り替え、データを取得する方法
2015/01/12
CakePHPで作成しているシステムの中で、別フレームワーク(ZendFramework)で作成されたサイトのデータを読み出す必要に迫られました。
サーバが同じなので、DBに対する接続等は問題ないと思うのですが、動的にデータベースの繰り返を行い、且つ非CakePHPなデータベースに対して処理できるのかってところが疑問だったのですが、結果的には全然問題ありませんでした。
今回はその忘備録です。
なお、CakePHPのバージョンは2.3.10で確認しました。
CakePHP2で動的にDBを切り替える方法
まずは動的にデータベースを切り替える方法から。
元々、CakePHPでは複数のDBを扱うことが出来るので、それほど敷居が高いことではありませんでした。
変更すべきファイルはDB設定の、 app/Config/database.php です。
データベースの切り替え(呼び出し)
通常は $default で設定しているDBを使用し、特定のモデルの場合にDBを切り替える、という運用を目指すとすると、モデルファイルに設定変更を記述するのが早いかと思われます。
ということで、以下のようにします。
app/Model/Profile.php
解説するまでもないですが、「$useDbConfig」で、先ほど database.php で設定した、別DBの設定を読み込んでいるだけです。
もうひとつの、CakePHPの命名規則から外れている単数形のテーブル名の件ですが、その場合は「$useTable」で指定すると扱えるようになります。
ちなみに、今回の処理の際、テーブル名が「tb_mail」という形だったのですが、モデル名をキャメルケースにし、同じようにテーブル名を指定すれば全く問題ありませんでした。
モデルの内容はこんな感じ。
app/Model/TbEmail.php
さほど手順を踏むでもなく、柔軟に対応が可能。
CakePHPは便利ですね。