eyecatch_cakephp_20160912_cmp

CakePHP

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は便利ですね。

-CakePHP
-, , , ,