複数のデータベースを切り替える方法(別データベースを使用する)
CakePHPで複数のデータベースを使用する方法です。
郵便番号や祝日などどのシステムでも変わらないデータを共通のデータベースとした場合などに使用できます。
(祝日は春分の日、秋分の日を自動では計算できません。
春分の日、秋分の日は政府発表により確定する祝日です。)
[参考記事] コマンドやphpMyAdminで複数のデータベースに接続できるユーザーを作成する方法
[参考記事] CakePHPのDB接続情報設定
[参考記事] 『id』以外のプライマリキーのカラム名を使用する方法
[参考記事] 郵便番号データのダウンロードと注意点
/app/config/database.php
に複数の接続設定を記述します。
class DATABASE_CONFIG { var $default = array( 'driver' => 'mysql', 'persistent' => false, 'host' => 'localhost', 'login' => 'user', 'password' => 'password', 'database' => 'dbname', 'port' => '3306', 'prefix' => '', 'encoding' => 'utf8' ); var $sub = array( 'driver' => 'mysql', 'persistent' => false, 'host' => 'localhost', 'login' => 'user', 'password' => 'password', 'database' => 'dbname2', 'port' => '3306', 'prefix' => '', 'encoding' => 'utf8' ); }
スポンサーリンク
Modelに記述する場合
defaultが標準で使用されるデータベースになります。
default以外のデータベースを使用するモデルに
var $useDbConfig = "sub";
を追加します。
具体的には次のようになります。
class Samples extends AppModel { var $useDbConfig = "sub"; }
Controllersに記述する場合
コントローラ内で一時的に他のデータベースを使用する場合は次のようになります。
class SampleController extends AppController { $this->【Model名】->setDataSource('sub'); }
defaultが標準なので、元の接続に戻す場合には、defaultをセットします。
class SampleController extends AppController { $this->【Model名】->setDataSource('default'); }
データベースに接続する権限を付与する
他のデータベースに接続する権限がなければ、接続はできません。
[参考記事] コマンドやphpMyAdminで複数のデータベースに接続できるユーザーを作成する方法
編集する特権を与えるにはMySQLでは次のようにします。
GRANT SELECT , INSERT , UPDATE , DELETE ON `sample¥_db` . * TO 'username'@'%';
この時、『sample¥_db』を『sample_db』としてしまうと、ワイルドカードになり、『samplexdb』というデータベースにも特権を与えてしまうことになります。
関連記事
- CakePHPのバージョンごとのシステム要件
- PHP Strict Standards: Non-static method と出る場合の対処法
- CakePHPでカラムを比較してSELECTする方法
- [CakePHPのバグ]キャッシュ処理でunlinkエラーが発生する
- 『id』以外のプライマリキーのカラム名を使用する方法
- [CakePHPのバグ]キャッシュ処理でunserializeエラーが発生する
- プライマリキーIDを連番数字ではなく推測しにくい文字列にする方法
- MySQLで文字化けを防ぐ方法
- action名にlistは使えない listを使う方法
- ログイン認証処理をする方法
- CakePHP、Symfony、Zend Frameworkの比較
- CakePHPのDB接続情報設定
- ファイル読み込みPATHを設定
- デバッグレベルを設定
- セキュリティレベルの設定
- キャッシュを有効にする
- CakePHPのエラーテンプレートの一覧
- データベーステーブルを参照しないページを作る
- TOPページはIndexControllerではない Cannot redeclare config()
- ディレクトリ構成
- CakePHP
- SQL
- MySQL MariaDB
- PostgreSQL
- Oracle
- SQL Server
- DB2
- Zend Frameworkのデータベース接続
- WordPressのインストール
- 文字列型(データ型)のまとめ
- 文字コードを指定する方法
- 別テーブルでSELECT JOINしながらUPDATEする方法(SELECTした結果でUPDATEする)
- EC-CUBEのサーバ移行の方法
- EC-CUBEのバックアップ機能とリストア
- SQLの昇順、降順を表すASCやDESCの言葉の由来
- iusリポジトリで公開されているパッケージの一覧
スポンサーリンク