複数のデータベースを切り替える方法(別データベースを使用する)
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』というデータベースにも特権を与えてしまうことになります。
関連記事
- 複数カラムのユニーク制約バリデーション
- 標準のValidatorを拡張してカスタマイズする方法
- テンプレート(template)側でログイン情報を取得する方法
- フォームの必須エラーメッセージをHTML5標準にする方法、カスタマイズする方法
- 標準のHelperを拡張してカスタマイズする方法 CakePHP2
- 国際化i18n(多言語化)
- URLをハイフン区切りからアンダーバー区切りやキャメルケースにする方法
- CakePHP5系の入手方法・インストール方法
- CakePHP4系の入手方法・インストール方法
- CakePHP3系の入手方法・インストール方法
- CakePHP2系の入手方法・インストール方法
- CakePHP1系(CakePHP1.3)をPHP7・PHP8以降に対応させる方法
- CakePHP1系(CakePHP1.3)の入手方法・インストール方法
- Composerコマンドでウクライナへのメッセージが表示されたことがあります
- Composerをインストールする方法と使い方
- コーディング規約のチェックを行う・整形する標準ツール(PHP CodeSniffer)の使い方
- Seedの実行順(外部キー制約などを先に実行させる方法) Foreign key violation
- PostgreSQLでERROR: duplicate key value violates unique constraint "hoge_pkey" DETAIL: Key (id)=(10) already exists.と出る場合
- PostgreSQLで自動採番をするシーケンス(sequence)とは【AUTO INCREMENT】
- Apacheで所有権や書き込み権限があるにも関わらずPermissions deniedが出る場合
- CakePHPのバージョンごとのシステム要件
- 1つのフィールドにバリデーションエラーを1つだけ表示させる方法
- 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
スポンサーリンク